如标题所述,我要测试以下方法:
Class A:
private List<String> s;
public A() {
s = new ArrayList<String>();
s.add("Gregor");
s.add("Example");
s.add("Example2");
}
public String argr(B b) { //B-> Interface
int t = b.t();
String r = "Hello ";
for(String z:s ) {
boolean x = b.f(t, 5);
if(x) {
r += z;
}
}
return r;
}
使用接口B:
public interface B {
int t();
boolean f(int t, int i);
}
测试:
class Example{
public B b;
private A example = new A();
@Test
void test() {
//assert(example .s() == "Hello GregorExampleExample2");
System.out.println(example .s(b));
//bsp.A(c);
}
}
Issue:方法:b,要求使用Interface
a作为参数,可以通过此Method实现接口:Class A implements B{}
问题:测试时无法识别A类中接口实现的方法。
问题1:您如何使用接口作为参数的jUnit测试方法?
问题2:您是否需要在jUnit测试类中实现接口方法,使其起作用?
您可以为每个测试用例创建一个匿名类,如下所示:
b = new B() {
@Override
public int t() {
return 0;
}
@Override
public boolean f(int t, int i) {
return false;
}
};
只需将返回值替换为适合您的测试用例的值,但要避免在类中放入任何逻辑(因为那样的话,您还必须对其进行测试)。
如果您不想为每个测试用例实现该接口,则另一种可能性是使用Mockito模拟您的接口:
B mock = Mockito.mock(B.class);
Mockito.when(mock.f(Mockito.anyInt(), Mockito.anyInt())).thenReturn(false);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句