Bladeren bron

添加设备服务UT

LiHaoyu 5 jaren geleden
bovenliggende
commit
74e54b085a

+ 1 - 1
src/main/java/net/mooctest/www/android_auto_test/common/constant/enums/DeviceRunningStatus.java

@@ -14,7 +14,7 @@ public enum DeviceRunningStatus {
     /**
      * 设备准备中,包括初始化driver,各种监控线程
      */
-    PRAPARE("1", "准备中"),
+    PREPARE("1", "准备中"),
     /**
      * 设备执行自动化测试状态
      */

+ 0 - 4
src/main/java/net/mooctest/www/android_auto_test/dao/RedisMappers/DeviceRunningStatusMap.java

@@ -2,13 +2,9 @@ package net.mooctest.www.android_auto_test.dao.RedisMappers;
 
 import net.mooctest.www.android_auto_test.common.constant.enums.DeviceRunningStatus;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.stereotype.Component;
 
-import javax.annotation.Resource;
-
 /**
  * @author henrylee
  */

+ 13 - 9
src/main/java/net/mooctest/www/android_auto_test/services/Impl/DeviceServiceImpl.java

@@ -37,16 +37,20 @@ public class DeviceServiceImpl implements DeviceService {
             if ("".equals(line) || line.length()==0 || line.startsWith("List")){
                 continue;
             }
-            String[] temp = line.split("\t");
-            String deviceName = temp[0];
-            String deviceStatus = temp[1];
-            if (!deviceStatus.equals("device")){
-                continue;
+            try {
+                String[] temp = line.split("\t");
+                String deviceName = temp[0];
+                String deviceStatus = temp[1];
+                if (!"device".equals(deviceStatus)){
+                    continue;
+                }
+                Device device = new Device();
+                device.setId(deviceName);
+                device.setUdid(deviceName);
+                devices.add(device);
+            }catch (Exception ignored){
+
             }
-            Device device = new Device();
-            device.setId(deviceName);
-            device.setUdid(deviceName);
-            devices.add(device);
         }
         return devices;
     }

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

@@ -10,7 +10,6 @@ import net.mooctest.www.android_auto_test.Scripts.AbstractBaseScript;
 import net.mooctest.www.android_auto_test.Scripts.DefaultScript;
 import net.mooctest.www.android_auto_test.common.BeanFactory;
 import net.mooctest.www.android_auto_test.common.constant.Consts;
-import net.mooctest.www.android_auto_test.common.constant.enums.DeviceStatus;
 import net.mooctest.www.android_auto_test.common.exceptions.AppiumDriverInitException;
 import net.mooctest.www.android_auto_test.common.exceptions.TraceTimeoutException;
 import net.mooctest.www.android_auto_test.common.constant.enums.DeviceRunningStatus;
@@ -79,7 +78,7 @@ public class CoverageTest extends Thread{
 
     @Override
     public void run() {
-        deviceService.updateDeviceRunningStatus(traceId, udid, DeviceRunningStatus.PRAPARE);
+        deviceService.updateDeviceRunningStatus(traceId, udid, DeviceRunningStatus.PREPARE);
         PrintUtil.print("Start Test", this.udid, TAG);
         try{
             this.startTime = System.currentTimeMillis();

+ 1 - 0
src/test/java/net/mooctest/www/android_auto_test/ServiceImpl/ApkServiceTest.java

@@ -114,6 +114,7 @@ public class ApkServiceTest {
         PowerMockito.mockStatic(Thread.class);
         URL url = new URL("http://www.baidu.com");
         PowerMockito.whenNew(URL.class).withArguments(urlStr).thenReturn(url);
+        // 下面两行都是进行mock的步骤
         PowerMockito.doThrow(new IOException()).when(FileUtils.class);
         FileUtils.copyURLToFile(any(URL.class), any(File.class));
         // action

+ 200 - 0
src/test/java/net/mooctest/www/android_auto_test/ServiceImpl/DeviceServiceTest.java

@@ -0,0 +1,200 @@
+package net.mooctest.www.android_auto_test.ServiceImpl;
+
+import com.sinaapp.msdxblog.apkUtil.entity.ApkInfo;
+import net.mooctest.www.android_auto_test.common.constant.enums.DeviceRunningStatus;
+import net.mooctest.www.android_auto_test.common.constant.enums.DeviceStatus;
+import net.mooctest.www.android_auto_test.dao.RedisMappers.DeviceRunningStatusMap;
+import net.mooctest.www.android_auto_test.dao.RedisMappers.DeviceStatusMap;
+import net.mooctest.www.android_auto_test.models.Device;
+import net.mooctest.www.android_auto_test.services.Impl.DeviceServiceImpl;
+import net.mooctest.www.android_auto_test.utils.OsUtil;
+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 java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.mockito.Mockito.*;
+
+@SpringBootTest
+@RunWith(PowerMockRunner.class)     // 这是必须的
+@PrepareForTest({OsUtil.class})
+public class DeviceServiceTest {
+
+    @Mock
+    DeviceRunningStatusMap deviceRunningStatusMap;
+
+    @Mock
+    DeviceStatusMap deviceStatusMap;
+
+    @InjectMocks
+    private DeviceServiceImpl deviceService = new DeviceServiceImpl();
+
+    List<Device> devices;
+    List<String> selectedDevices;
+
+    @Before
+    public void setUp(){
+        MockitoAnnotations.initMocks(this);
+        Device d1 = new Device();
+        d1.setUdid("d1");
+        Device d2 = new Device();
+        d2.setUdid("d2");
+        Device d3 = new Device();
+        d3.setUdid("d3");
+        devices = Arrays.asList(d1, d2, d3);
+    }
+
+    @Test
+    public void shouldReturnEmptyListWhenHaveNoDevice(){
+        // arrange
+        String command = "adb devices";
+        String result = "List of devices attached\n";
+        PowerMockito.mockStatic(OsUtil.class);
+        when(OsUtil.runCommand(command)).thenReturn(result);
+        // action
+        List<Device> deviceList = deviceService.getOnlineDeviceList();
+        // assert
+        Assert.assertEquals(0, deviceList.size());
+    }
+
+    @Test
+    public void shouldReturnDeviceListWhenGetOnlineDevices(){
+        // arrange
+        String command = "adb devices";
+        String result = "List of devices attached\naaa\tdevice\nbbb\tdevice\n";
+        PowerMockito.mockStatic(OsUtil.class);
+        when(OsUtil.runCommand(command)).thenReturn(result);
+        // action
+        List<Device> deviceList = deviceService.getOnlineDeviceList();
+        // assert
+        Assert.assertEquals(2, deviceList.size());
+        Assert.assertEquals("aaa", deviceList.get(0).getUdid());
+    }
+
+    @Test
+    public void shouldReturnDeviceListWhenSelectNoDevice(){
+        // arrange
+        ApkInfo apkInfo = new ApkInfo();
+        selectedDevices = new ArrayList<>();
+        // action
+        List<Device> ds = deviceService.selectDeviceByApp(apkInfo, devices, selectedDevices);
+        // assert
+        Assert.assertEquals(3, ds.size());
+        Assert.assertEquals("d2", ds.get(1).getUdid());
+    }
+
+    @Test
+    public void shouldReturnDeviceListWhenSelectNoneDevice(){
+        // arrange
+        ApkInfo apkInfo = new ApkInfo();
+        selectedDevices = Collections.singletonList("d4");
+        // action
+        List<Device> ds = deviceService.selectDeviceByApp(apkInfo, devices, selectedDevices);
+        // assert
+        Assert.assertEquals(0, ds.size());
+    }
+
+    @Test
+    public void shouldReturnDeviceListWhenSelectDevice(){
+        // arrange
+        ApkInfo apkInfo = new ApkInfo();
+        selectedDevices = Arrays.asList("d1", "d4", "d5");
+        // action
+        List<Device> ds = deviceService.selectDeviceByApp(apkInfo, devices, selectedDevices);
+        // assert
+        Assert.assertEquals(1, ds.size());
+        Assert.assertEquals("d1", ds.get(0).getUdid());
+    }
+
+    @Test
+    public void testUpdateDeviceRunningStatus(){
+        // arrange
+        doNothing().when(deviceRunningStatusMap).put("id","traceId", DeviceRunningStatus.PREPARE);
+        // action
+        deviceService.updateDeviceRunningStatus("traceId","id", DeviceRunningStatus.PREPARE);
+        // assert
+        verify(deviceRunningStatusMap).put("id","traceId", DeviceRunningStatus.PREPARE);
+    }
+
+    @Test
+    public void testGetDeviceRunningStatus(){
+        // arrange
+        when(deviceRunningStatusMap.get("id","traceId")).thenReturn(DeviceRunningStatus.FINISH);
+        // action
+        DeviceRunningStatus ds = deviceService.getDeviceRunningStatus("traceId", "id");
+        // assert
+        Assert.assertEquals(ds, DeviceRunningStatus.FINISH);
+    }
+
+    @Test
+    public void testUpdateDeviceStatus(){
+        // arrange
+        doNothing().when(deviceStatusMap).put("id", DeviceStatus.FREE);
+        // action
+        deviceService.updateDeviceStatus("id", DeviceStatus.FREE);
+        // assert
+        verify(deviceStatusMap).put("id", DeviceStatus.FREE);
+    }
+
+    @Test
+    public void testGetDeviceStatus(){
+        // arrange
+        when(deviceStatusMap.get("id")).thenReturn(DeviceStatus.FREE);
+        // action
+        DeviceStatus ds = deviceService.getDeviceStatus( "id");
+        // assert
+        Assert.assertEquals(ds, DeviceStatus.FREE);
+    }
+
+    @Test
+    public void testOccupyDevice(){
+        // arrange
+        when(deviceStatusMap.compareAndSet("id", DeviceStatus.FREE, DeviceStatus.OCCUPY)).thenReturn(true);
+        // action
+        boolean result = deviceService.occupyDevice("id");
+        // assert
+        Assert.assertTrue(result);
+    }
+
+    @Test
+    public void testFreeDevice(){
+        // arrange
+        when(deviceStatusMap.compareAndSet("id", DeviceStatus.OCCUPY, DeviceStatus.FREE)).thenReturn(false);
+        // action
+        boolean result = deviceService.freeDevice("id");
+        // assert
+        Assert.assertFalse(result);
+    }
+
+    @Test
+    public void testStartDevice(){
+        // arrange
+        when(deviceStatusMap.compareAndSet("id", DeviceStatus.OCCUPY, DeviceStatus.RUNNING)).thenReturn(true);
+        // action
+        boolean result = deviceService.startRunDevice("id");
+        // assert
+        Assert.assertTrue(result);
+    }
+
+    @Test
+    public void testEndDevice(){
+        // arrange
+        when(deviceStatusMap.compareAndSet("id", DeviceStatus.RUNNING, DeviceStatus.FREE)).thenReturn(true);
+        // action
+        boolean result = deviceService.endRunDevice("id");
+        // assert
+        Assert.assertTrue(result);
+    }
+}