后端单元测试框架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

浙公网安备 33010602011771号