后端单元测试框架junit4总结

一、JUnit4常用注解

@BeforeClass:在所有用例执行前执行一次,要用static修饰
@AfterClass:在所有用例执行后执行一次,要用static修饰
@Before:在每个用例执行前执行,不需要用static修饰
@After:在每个用例执行后执行,不需要用static修饰
示例:
public class JunitDemoTests {
    @BeforeClass
     public static void setUpBeforeClass() throws Exception {
           System.out.println("this is before class");
    }

    @AfterClass
    public static void tearDownAfterClass() throws Exception {
        System.out.println("this is after  class");
    }


    @Before
    public  void setUp() throws Exception {
        System.out.println("this is before");
    }

    @After
    public  void tearDown() throws Exception {
        System.out.println("this is aDown");
    }

    @Test
    public void test1() {
           System.out.println("this is test1");
    }

    @Test
    public void test2() {
        System.out.println("this is test2");
    }

}

@Ignore:不执行此用例

示例:
    @Test
    @Ignore
    public void test2() {
        System.out.println("this is test2");
    }

 @Test(expected = ArithmeticException.class):异常测试,预期是此用例会报错,执行此异常用例时会通过

示例:
    @Test(expected = ArithmeticException.class)
    public void test3() {
        System.out.println("in test case 3");
        int a = 0;
        int b = 1 / a;
    }

二、测试套件

有三个文件,TaskTest1.java、TaskTest2.java、TaskTest.java,在TaskTest.java中引入TaskTest1和TaskTest2的测试用例

示例:

TaskTest1.java、TaskTest2.java

import org.junit.Test;

public class TaskTest1 {
    @Test
     public void test() {
            System.out.println("this is TaskTest1");
             }
}
import org.junit.Test;


public class TaskTest2 {
    @Test
     public void test() {
            System.out.println("this is TaskTest2");
             }
}

TaskTest.java

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({ TaskTest1.class, TaskTest2.class })
public class TaskTest {

}

执行结果:

 三、参数化

  Calculate.java

public class Calculate {
    public int sum(int first, int second) {
        return first + second;
    }
}
ParametersTest.java
import java.util.Arrays;
import java.util.Collection;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class ParametersTest
{
    private int expected;
    private int first;
    private int second;

    private Calculate calculate = new Calculate();

    public ParametersTest(int expected, int first, int second) {
        super();
        this.expected = expected;
        this.first = first;
        this.second = second;
    }

    @Parameters
    public static Collection<Integer[]> testDatas() {
        // 测试参数:和构造函数中参数的位置一一对应。
        return Arrays.asList(new Integer[][] { { 3, 2, 1 }, { 5, 3, 2 },
                { 7, 6, 1 } });
    }

    @Test
    public void testSum() {
        System.out.println("测试:" + first + "+" + second);
        Assert.assertEquals(expected, calculate.sum(first, second));
    }

}

 四、断言

@Test
    public void test4() {
        String obj1 = "junit";
        String obj2 = "junit";
        String obj3 = "test";
        String obj4 = "test";
        String obj5 = null;

        int var1 = 1;
        int var2 = 2;

        int[] array1 = {1, 2, 3};
        int[] array2 = {1, 2, 3};

        Assert.assertEquals(obj1, obj2);

        Assert.assertSame(obj3, obj4);
        Assert.assertNotSame(obj2, obj4);

        Assert.assertNotNull(obj1);
        Assert.assertNull(obj5);

        Assert.assertTrue(var1 < var2);
        Assert.assertFalse(var1 > var2);

        Assert.assertArrayEquals(array1, array2);

    }     

五、与sprintboot结合使用

如果项目是sprint web项目,需要启动相应的spring服务时,需要使用sprintBootTest

在pom.xml文件中导入sprintBootTest依赖

      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
      </dependency>

导入junit4依赖包:File-->project Structure-->Project Settings-->Modules

 在测试类中增加以下注解:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={启动类名.class})

示例:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={DeviceConnectivityConsoleApplication.class})
public class ConsoleApplicationTests {

    @Autowired
    IDeviceInfoService deviceInfoService;
    @Autowired
    IUsersService usersService;
    @Autowired
    ISysChannelUserService sysChannelUserService;

    @BeforeClass
    public static void before(){
        String serviceId;
        try {
            serviceId = InetAddress.getLocalHost().getHostName();
        } catch (UnknownHostException e) {
            serviceId = org.apache.commons.lang3.RandomStringUtils.randomAlphabetic(10);
        }
        System.setProperty("serviceId", serviceId);
    }

    @Test
    public void getDevice() {
       List<DeviceInfo> list= deviceInfoService.list();
       System.out.println(JSONUtils.valueToString(list));
       Assert.assertNotNull(list);
       Assert.assertEquals(list.get(0).getDeviceIdNo(),"123456");
    }

}

相关网站:

单元测试框架junit4:https://blog.csdn.net/qq_34264849/article/details/88243278
SpringBoot单元测试:https://blog.csdn.net/sinat_27956747/article/details/114066947
JUnit单元测试之断言:https://blog.csdn.net/HuoBaoYan/article/details/81664098

 
 
 
 
 
 
 
posted @ 2021-12-23 17:53  zhanchenglan  阅读(92)  评论(0编辑  收藏  举报