Przeglądaj źródła

添加二次分析测试用例

LiHaoyu 5 lat temu
rodzic
commit
5bf22cebea

+ 18 - 0
pom.xml

@@ -26,6 +26,24 @@
         </dependency>
 
         <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-core</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito2</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+
+        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <scope>test</scope>

+ 2 - 2
src/main/java/net/mooctest/www/android_auto_test/utils/TraceDaemon.java

@@ -131,13 +131,13 @@ public class TraceDaemon extends Thread{
         } catch (Exception e) {
             e.printStackTrace();
         }
-        PrintUtil.print(String.format("Upload report json file"), TAG);
+        PrintUtil.print(String.format("Upload %s report json file", reportType), TAG);
         // 上传data.json文件
         File data = new File(AddressUtil.getDataJsonPath(traceId));
         String path = ossService.uploadFileToTraceDir(data, traceId, Consts.REPORT_FILE_NAME);
         int retryTimes = 0;
         // 上传失败,重试5次
-        while (path != null && retryTimes < Consts.UPLOAD_OSS_MAX_ATTEMPTS){
+        while (path == null && retryTimes < Consts.UPLOAD_OSS_MAX_ATTEMPTS){
             try {
                 Thread.sleep(3000);
                 path = ossService.uploadFileToTraceDir(data, traceId, Consts.REPORT_FILE_NAME);

+ 85 - 0
src/test/java/net/mooctest/www/android_auto_test/SecondaryTest/SecondaryControllerTest.java

@@ -0,0 +1,85 @@
+package net.mooctest.www.android_auto_test.SecondaryTest;
+
+import net.mooctest.www.android_auto_test.controller.SecondaryController;
+import net.mooctest.www.android_auto_test.services.SecondaryService;
+import net.mooctest.www.android_auto_test.vo.SecondaryResult;
+import org.json.JSONObject;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@SpringBootTest
+public class SecondaryControllerTest {
+
+    private MockMvc mockMvc;
+
+    @Mock
+    private SecondaryService secondaryService;
+
+    @InjectMocks
+    private SecondaryController secondaryController = new SecondaryController();
+
+    private String traceId;
+    private String toolName;
+
+    @Before
+    public void setUp(){
+        MockitoAnnotations.initMocks(this);
+        mockMvc = MockMvcBuilders.standaloneSetup(secondaryController).build();
+        this.traceId = "mockId";
+        this.toolName = "mockTool";
+    }
+
+    @Test
+    public void testStart() throws Exception{
+        //arrange
+        doNothing().when(secondaryService).generateSecondaryReport(traceId, toolName);
+        //action
+        MvcResult result = mockMvc.perform(post("/api/v1/secondaryAnalysis")
+                .param("traceId", traceId)
+                .param("toolName", toolName)
+                .contentType(MediaType.APPLICATION_JSON)
+                .content("{}"))
+                .andDo(print()).andExpect(status().isOk()).andReturn();
+        //assert
+        verify(secondaryService).generateSecondaryReport(traceId, toolName);
+        boolean re = Boolean.parseBoolean(result.getResponse().getContentAsString());
+        Assert.assertTrue(re);
+    }
+
+    @Test
+    public void testStatus() throws Exception{
+        //arrange
+        SecondaryResult sr = new SecondaryResult();
+        sr.setTraceId(traceId);
+        sr.setToolName(toolName);
+        sr.setStatusCode("5");
+        sr.setDescription("success");
+        when(secondaryService.getSecondaryStatus(traceId, toolName)).thenReturn(sr);
+        //action
+        MvcResult result = mockMvc.perform(get("/api/v1/secondaryAnalysis")
+                .param("traceId", traceId)
+                .param("toolName", toolName))
+                .andDo(print()).andExpect(status().isOk()).andReturn();
+        //assert
+        verify(secondaryService).getSecondaryStatus(traceId, toolName);
+        JSONObject re = new JSONObject(result.getResponse().getContentAsString());
+        Assert.assertEquals(traceId, re.getString("traceId"));
+        Assert.assertEquals(toolName, re.getString("toolName"));
+        Assert.assertEquals("5", re.getString("statusCode"));
+    }
+}

+ 94 - 0
src/test/java/net/mooctest/www/android_auto_test/SecondaryTest/SecondaryServiceTest.java

@@ -0,0 +1,94 @@
+package net.mooctest.www.android_auto_test.SecondaryTest;
+
+
+import net.mooctest.www.android_auto_test.common.constant.enums.SecondaryStatus;
+import net.mooctest.www.android_auto_test.common.exceptions.HttpNotFoundException;
+import net.mooctest.www.android_auto_test.dao.RedisMappers.SecondaryStatusMap;
+import net.mooctest.www.android_auto_test.services.Impl.SecondaryServiceImpl;
+import net.mooctest.www.android_auto_test.services.OssService;
+import net.mooctest.www.android_auto_test.utils.AddressUtil;
+import net.mooctest.www.android_auto_test.vo.SecondaryResult;
+import org.junit.Assert;
+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.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.springframework.boot.test.context.SpringBootTest;
+import static org.mockito.Mockito.*;
+
+
+@SpringBootTest
+@RunWith(PowerMockRunner.class)     // 这是必须的
+@PrepareForTest({AddressUtil.class,
+        SecondaryServiceImpl.class,
+        AddressUtil.class})
+public class SecondaryServiceTest {
+
+    private String traceId;
+    private String toolName;
+
+    @Mock
+    private OssService ossService;
+
+    @Mock
+    private SecondaryStatusMap secondaryStatusMap;
+
+    @InjectMocks
+    private SecondaryServiceImpl secondaryService = new SecondaryServiceImpl();
+
+    @Before
+    public void setUp(){
+        MockitoAnnotations.initMocks(this);
+        this.traceId = "mockId";
+        this.toolName = "mockTool";
+    }
+
+    @Test
+    public void testStartWithWrongTraceId(){
+        // arrange
+        PowerMockito.mockStatic(AddressUtil.class);
+        when(AddressUtil.getTraceDir(traceId)).thenReturn("none");
+        // action
+        try {
+            secondaryService.generateSecondaryReport(traceId, toolName);
+        } catch (Exception e){
+            // assert
+            Assert.assertEquals(HttpNotFoundException.class, e.getClass());
+            Assert.assertEquals("任务不存在或信息已被清理,请重新测试", e.getMessage());
+        }
+    }
+
+    @Test
+    public void testStatusRunning(){
+        // arrange
+        when(secondaryStatusMap.get(traceId, toolName)).thenReturn(SecondaryStatus.RUNNING);
+        // action
+        SecondaryResult result = secondaryService.getSecondaryStatus(traceId, toolName);
+        // assert
+        Assert.assertEquals(traceId, result.getTraceId());
+        Assert.assertEquals(toolName, result.getToolName());
+        Assert.assertEquals(SecondaryStatus.RUNNING.getCode(), result.getStatusCode());
+        Assert.assertEquals(SecondaryStatus.RUNNING.getDescription(), result.getDescription());
+        Assert.assertNull(result.getDownloadUrl());
+    }
+
+    @Test
+    public void testStatusSuccess(){
+        // arrange
+        when(secondaryStatusMap.get(traceId, toolName)).thenReturn(SecondaryStatus.SUCCESS);
+        when(ossService.getDadaJsonDownloadPath(traceId, toolName + ".json")).thenReturn("mockUrl");
+        // action
+        SecondaryResult result = secondaryService.getSecondaryStatus(traceId, toolName);
+        // assert
+        Assert.assertEquals(traceId, result.getTraceId());
+        Assert.assertEquals(toolName, result.getToolName());
+        Assert.assertEquals(SecondaryStatus.SUCCESS.getCode(), result.getStatusCode());
+        Assert.assertEquals(SecondaryStatus.SUCCESS.getDescription(), result.getDescription());
+        Assert.assertEquals("mockUrl", result.getDownloadUrl());
+    }
+}