junit 是一個面向於研發人員使用的輕量的測試模塊,適合做單元測試。而testng百度后發現更強大,可以做功能測試,但對於我這種RD,貌似junit足溝了呢!
java Mock PowerMock、jmockit 模擬包非常優秀,我目前選型學會一個就不錯了,不做評價,我學的powermock,據說jmockit更強大。但是powermock貌似繼承了舊的easymock和jmock,所以用的人比較大(個人理解)。
對於junit測試的幾個注解
@RunWith
@Before
@Test
@After
powerMock注解
@Mock
@InjectMocks
@RunWith 表示運行方式,@RunWith(JUnit4TestRunner)、@RunWith(SpringRunner.class),@RunWith(PowerMockRunner.class) 三種運行方式,分別在不同的場景中使用。
@Before是 @Test運行之前調用的方法,可以做初始化操作
@Test 是測試用例的單元
@After 執行完測試用例需要執行的清理工作
@Mock 有點類似Autowired注解,而@Mock注解是自動實現模擬對象,而並非Bean實例創建
@InjectMocks 實現對@Mock注解的對象注入到當前對象中,通過MockitoAnnotations.initMocks(this);實現
package aa; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.powermock.api.mockito.PowerMockito; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.mockito.Matchers.any; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @RunWith(PowerMockRunner.class) @SpringBootTest(classes = MainApplication.class) @PowerMockRunnerDelegate(SpringRunner.class) @PowerMockIgnore("javax.management.*") public class moreTest { @Mock TService tService; @InjectMocks TController controller; @Autowired private WebApplicationContext ctx; private MockMvc mvc; @Before public void before() throws Exception { MockitoAnnotations.initMocks(this); //如果簡單mock一個請求可以使用這個,但是要模擬注入,還是按下面的方式實現controller比較好 // mvc = MockMvcBuilders.webAppContextSetup(ctx).build(); mvc = MockMvcBuilders.standaloneSetup(controller).build(); // taskPackageService=PowerMockito.mock(TService); PowerMockito.when(tService.queryMethod(any(ParameClass.class))) .thenReturn(88); PowerMockito.whenNew(TService.class).withNoArguments().thenReturn(tService); } @Test public void searchTest() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/welcome").header("User-Agent", "xx") .param("page", "1") ).andExpect(status().isOk()).andDo((MvcResult result) -> { System.out.println(result.getResponse().getContentAsString()); }); } }
