我该如何测试界面?

时间:2013-06-14 12:07:53

标签: java object testing interface junit

我想为一个接口做一个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 个答案:

答案 0 :(得分:18)

interface是合约。没有逻辑可以测试。

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

你必须问自己你想要测试什么?鉴于interface方法具有实现,没有代码来测试

说我有interface这样的

public interface DoesStuff {
    void doStuff();
}

有什么可以测试的?我唯一要说的是我想要一个implements DoesStuffdoStuff的课程。

答案 1 :(得分:6)

测试接口的唯一方法是创建一个实现它的具体类,实例化它并测试该类。您无法直接测试接口,因为如您所知,它无法实例化,无需进行任何测试。这应该是显而易见的:接口只是方法签名的集合,没有方法体 - 因此没有要测试的行为。

答案 2 :(得分:3)

在接口中没有要测试的功能(因为它无法实例化;它没有方法实现)。所以JUnit没有什么可以做的。

答案 3 :(得分:0)

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

抽象基类可以测试应该保留的内容,例如close之后的open或其他内容。