如何自动Mock实现生成?

摘要:背景 单元测试中很多对象需要mock,每次都要写很多重复代码 解决 Mockito提供了@Mock注解,但需要其他操作配合注解 方案1 MockitoAnnotations @Before public void setUp() { Moc
背景 单元测试中很多对象需要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协同工作