如何自动Mock
背景
单元测试中很多对象需要mock,每次都要写很多重复代码
解决
Mockito提供了@Mock注解,但需要其他操作配合注解
方案1 MockitoAnnotations
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
需要在@Before方法中初始化
方案2 MockitoJUnitRunner
@RunWith(MockitoJUnitRunner.StrictStubs.class)
public class ExampleTest {
@Mock
private List list;
@Test
public void shouldDoSomething() {
list.add(100);
}
}
无法与其他Runner兼容,Runner只能有一个
方案3 MockitoSession
public class ExampleTest {
@Mock Foo foo;
MockitoSession mockito;
@Before public void setup() {
mockito = Mockito.mockitoSession()
.initMocks(this)
.strictness(Strictness.STRICT_STUBS)
.startMocking();
}
@After public void tearDown() {
mockito.finishMocking();
}
}
@Before方法和@After方法需要手动开启关闭,还需要一个全局变量
方案4 MockitoRule
public class ExampleTest {
@Rule public MockitoRule rule = MockitoJUnit.rule().strictness(Strictness.STRICT_STUBS);
@Mock
private List list;
@Test
public void shouldDoSomething() {
list.add(100);
}
}
声明一个全局变量即可
结论
MockitoRule最方便,不用写样板代码,也可以和其他Runner协同工作

浙公网安备 33010602011771号