Nik*_*Lab 17 java unit-testing junit4 mockito robolectric
我怎么能和Mockito一起模拟我班上正在测试的其他课程?
例如:
MyClass.java
class MyClass {
public boolean performAnything() {
AnythingPerformerClass clazz = new AnythingPerformerClass();
return clazz.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
AnythingPerformerClass.java
class AnythingPerformerClass {
public boolean doSomething() {
//very very complex logic
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
并测试:
@Test
public void testPerformAnything() throws Exception {
MyClass clazz = new MyClass();
Assert.assertTrue(clazz.performAnything());
}
Run Code Online (Sandbox Code Playgroud)
我可以欺骗AnythingPerformerClass从中排除不必要的逻辑AnythingPerformerClass吗?我可以覆盖doSomething()简单返回的方法true或false?
为什么我指定Mockito,因为我需要使用Robolectric进行Android测试.
cyo*_*yon 16
您可以重构,MyClass以便它使用依赖注入.AnythingPerformerClass您可以将类的实例传递给MyClass类似的构造函数,而不是让它创建实例:
class MyClass {
private final AnythingPerformerClass clazz;
MyClass(AnythingPerformerClass clazz) {
this.clazz = clazz;
}
public boolean performAnything() {
return clazz.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在单元测试中传递模拟实现
@Test
public void testPerformAnything() throws Exception {
AnythingPerformerClass mockedPerformer = Mockito.mock(AnythingPerformerClass.class);
MyClass clazz = new MyClass(mockedPerformer);
...
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您AnythingPerformerClass包含状态,则可以将a传递AnythingPerformerClassBuilder给构造函数.