2. 开启Mock的三种方式、深度Mook
package lesson3; import common.Account; import common.AccountDao; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Mockito.mock; @RunWith(MockitoJUnitRunner.class) public class _1_MockByRunnerTest { @Test public void testMock() { // AccountDao accountDao = mock(AccountDao.class); AccountDao accountDao = mock(AccountDao.class, Mockito.RETURNS_SMART_NULLS); Account account = accountDao.getAccount("x", "x"); System.out.println(account); } }
package lesson3; import common.Account; import common.AccountDao; import org.junit.Before; import org.junit.Test; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; public class _2_MockByAnnotationTest { /** * set param on annotation, replace on mock() method */ @Mock(answer = Answers.RETURNS_SMART_NULLS) private AccountDao accountDao; /** * replace @RunWith(MockitoJUnitRunner.class) */ @Before public void init() { MockitoAnnotations.initMocks(this); } @Test public void testMock() { Account account = accountDao.getAccount("x", "x"); System.out.println(account); } }
package lesson3; import common.Account; import common.AccountDao; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; public class _3_MockByRuleTest { @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Mock AccountDao accountDao; @Test public void testMock() { Account account = accountDao.getAccount("x", "x"); System.out.println(account); } }
package lesson3; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; public class _4_DeepMockTest { @Before public void init() { MockitoAnnotations.initMocks(this); } /** * without "answer = Answers.RETURNS_DEEP_STUBS", lesson3.foo() will throw NullPointException */ @Mock(answer = Answers.RETURNS_DEEP_STUBS) Lesson3Service lesson3Service; @Test public void testDeepMock() { lesson3Service.getLesson3().foo(); Lesson3 lesson3 = lesson3Service.getLesson3(); String foo = lesson3.foo(); Assert.assertEquals(true, lesson3 != null); Assert.assertEquals(true, foo == null); } }
public class Lesson3 { public String foo() { throw new RuntimeException(); } }
package lesson3; public class Lesson3Service { public Lesson3 getLesson3() { throw new RuntimeException(); } }