2

我想为一个接口做一个 JUnit 测试用例,你知道我不能从接口创建一个对象,我不希望任何类名出现在那个测试中,我只想测试接口并且只在测试中使用它的方法。

所以,我不能实例化一个像这样的对象:

Interface obj = new Class(); 

因为我不会使用任何类方法,也不想将接口实例化为:

Interface var = new Interface{//methods};

因为我不想覆盖测试中的方法。

更新:

i have an interface and a class which implements it:
public interface inter {
public void method1();
public void method2();
}


public class BlaBla implements inter{
@override
public void method1(){//stuff}
@override
public void method2(){//stuff}
}

我想测试 BlaBla,但在我的测试中处理它的接口(inter)。

4

4 回答 4

22

Aninterface是合同。它没有逻辑可以测试。

您可以使用模拟框架Mockito来创建实例,interface而无需手动存根方法。但它只会在后台存根它们。

你必须问自己想测试什么?鉴于这些interface方法没有实现,因此没有要测试的代码。

说我有一个interface这样的

public interface DoesStuff {
    void doStuff();
}

有什么要测试的?我唯一说过的是我想要一implements DoesStuff门课doStuff

于 2013-06-14T12:11:12.237 回答
7

测试接口的唯一方法是创建一个实现它的具体类,实例化它并测试该类。你不能直接测试一个接口,因为你知道,它不能被实例化,没有任何东西可以测试。这应该很明显:接口只是方法签名的集合,没有方法主体 - 因此没有要测试的行为。

于 2013-06-14T12:09:46.243 回答
3

接口中没有要测试的功能(因为它不能被实例化;它没有方法实现)。因此,JUnit 无能为力。

于 2013-06-14T12:09:59.120 回答
0

您可以为单元测试创​​建一个抽象基类。对于实现接口的特定类,单元测试将简单地扩展抽象基类。

抽象基类可以测试应该持有的东西,比如closeafteropen或其他东西。

于 2013-06-14T12:19:54.037 回答