后端单元测试框架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 CollectiontestDatas() { // 测试参数:和构造函数中参数的位置一一对应。 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依赖
org.springframework.boot spring-boot-starter-test test
导入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() { Listlist= 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