JUnit 以接口作为参数测试方法
JUnit Testing a Method with an Interface as the parameter
如标题所述,我想测试以下方法:
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);
}
}
问题:方法:b,需要一个Interface
作为参数,接口可以通过这个方法实现:Class A implements B{}
问题:测试时无法识别 Class A.
中的接口实现方法
问题 1:jUnit 如何测试以接口作为参数的方法?
问题 2: 是否需要在 jUnit 测试中实现接口方法class,它才能工作?
您可以为每个测试用例创建一个这样的匿名 class:
b = new B() {
@Override
public int t() {
return 0;
}
@Override
public boolean f(int t, int i) {
return false;
}
};
只需将 return 值替换为适合您的测试用例的值,但尽量避免在 class 中放置任何逻辑(因为那样您也必须对其进行测试)。
如果你不想为每个测试用例实现接口,另一种可能性是使用 Mockito 来模拟你的接口:
B mock = Mockito.mock(B.class);
Mockito.when(mock.f(Mockito.anyInt(), Mockito.anyInt())).thenReturn(false);
如标题所述,我想测试以下方法:
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);
}
}
问题:方法:b,需要一个Interface
作为参数,接口可以通过这个方法实现:Class A implements B{}
问题:测试时无法识别 Class A.
中的接口实现方法问题 1:jUnit 如何测试以接口作为参数的方法?
问题 2: 是否需要在 jUnit 测试中实现接口方法class,它才能工作?
您可以为每个测试用例创建一个这样的匿名 class:
b = new B() {
@Override
public int t() {
return 0;
}
@Override
public boolean f(int t, int i) {
return false;
}
};
只需将 return 值替换为适合您的测试用例的值,但尽量避免在 class 中放置任何逻辑(因为那样您也必须对其进行测试)。
如果你不想为每个测试用例实现接口,另一种可能性是使用 Mockito 来模拟你的接口:
B mock = Mockito.mock(B.class);
Mockito.when(mock.f(Mockito.anyInt(), Mockito.anyInt())).thenReturn(false);