下面是我的代码,我正在为方法执行编写Junit测试用例。我希望方法getList返回虚拟值,因为DB不可用。请建议我如何使用JMockit做同样的事情。
class BaseClass {
public List<> getList() {
return DataBase.getList();
}
}
class ChildClass extends BaseClass {
public boolean perform(String temp) {
boolean bool=true;
List list = getList();
for(String str:list){
if(str.equals(temp);
bool=false;
break;
}
return bool;
}
}
答案 0 :(得分:1)
不应该嘲笑BaseClass#getList()
,而是DataBase#getList()
:
public class ExampleTest {
@Tested ChildClass cut;
@Test
public void findItemInList(@Mocked DataBase db) {
List<String> list = Arrays.asList("Abc", "test", "def");
new Expectations() {{ DataBase.getList(); result = list; }};
boolean itemNotFound = cut.perform("test");
assertFalse(itemNotFound);
}
}
模拟BaseClass#getList()
需要部分模拟,可以使用new Expectations(cut) {{ cut.getList(); result = list; }}
完成。但部分嘲笑是一种应该避免的已知不良测试实践。
答案 1 :(得分:0)
只要ChildClass
不覆盖BaseClass::getList()
,您就必须模仿BaseClass::getList()
:
new MockUp<BaseClass>() {
@Mock
List<> getList() {
return new ArrayList(); // your mock here
}
}