【问题标题】:How to assign value to an implementation of an interface, but the interface doesn't have setter method?如何为接口的实现赋值,但接口没有setter方法?
【发布时间】:2012-07-05 03:13:56
【问题描述】:

我有一个接口:Show,我有一个实现类调用 ShowImpl,还有一个实现类调用 ManageShowImpl。我已经完成了ManageShowImpl里面的所有方法。现在我正在做 Junit 测试。我在ManageShowImpl中定义的方法,例如:addShows(Show...shows),现在我想给show数组赋值:Show[],但是在界面中:Show,我没有setter方法(这不应该在界面内),有专家可以告诉我如何将值添加到 Show[]。

【问题讨论】:

  • 您可以在界面中使用设置器。如果你真的想要一个只读接口,你将不得不通过 ManagerShowImpl 类。如果您的用例是您在某些方法或分配中接收接口类型并且需要添加显示,那么您必须将方法添加到接口。要么,要么投它;这可能是合理的,因为这听起来像是在单元测试中。
  • 我的情况是ManageShowImpl的所有方法中的参数都是Show(Interface),而不是ShowImpl(Class)。现在我想对 ManageShowImpl 中的方法进行单元测试,并且不知道如何将数据分配给 Show(Interface),但是在 ShowImpl 中,我确实有 setter 方法。有没有办法解决这个问题?

标签: oop interface junit setter


【解决方案1】:

如果我正确理解了您的问题,我认为您可以简单地在构造函数中设置值:

public class ShowImpl implements Show{

    private Show[] shows;

    public ShowImpl(Show... shows){
        this.shows = shows;
    }

    @Override
    public void someInterfaceMethod(){
        // ...
    }
}

【讨论】:

    【解决方案2】:

    (我不是 junit 专家,甚至是初学者,但也许我可以启发一些人来回答。我做了相当多的测试。)

    给定一个具有构造函数的类,您始终可以创建一个实例,用您想要的任何数据填充它,并以您想要的任何方式对其进行测试。接口受到更多限制。除了测试,这是一件非常好的事情。它限制了某人在掌握接口实现时可能造成的损害;它安全地封装了数据。但是你不能孤立地测试一个接口。您需要首先创建一个实现类的实例。那时你应该填写你的数组。 然后将其作为接口实例传递给测试方法来测试接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2015-03-28
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 2019-01-08
      • 2014-08-22
      相关资源
      最近更新 更多