我想为一个接口做一个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)处理我的测试。
答案 0 :(得分:18)
interface
是合约。没有逻辑可以测试。
您可以使用像Mockito
这样的模拟框架来创建interface
的实例,而无需手动存根方法。但它只会在后台存根。
你必须问自己你想要测试什么?鉴于interface
方法具有无实现,没有代码来测试。
说我有interface
这样的
public interface DoesStuff {
void doStuff();
}
有什么可以测试的?我唯一要说的是我想要一个implements DoesStuff
到doStuff
的课程。
答案 1 :(得分:6)
测试接口的唯一方法是创建一个实现它的具体类,实例化它并测试该类。您无法直接测试接口,因为如您所知,它无法实例化,无需进行任何测试。这应该是显而易见的:接口只是方法签名的集合,没有方法体 - 因此没有要测试的行为。
答案 2 :(得分:3)
在接口中没有要测试的功能(因为它无法实例化;它没有方法实现)。所以JUnit没有什么可以做的。
答案 3 :(得分:0)
您可以为单元测试创建抽象基类。对于实现接口的特定类,单元测试只是扩展抽象基类。
抽象基类可以测试应该保留的内容,例如close
之后的open
或其他内容。