Assert
- assertEquals(“message”,A,B),判断A,B是否相等,调用equals()方法
- assertSame(“message”,A,B),判断A,B是都相等,使用==操作符
- assertTrue(“message”,A),判断A条件是否为真
- assertFalse(“message”,A),判断A条件是否为假
- assertNotNull(“message”,A),判断A对象是否不为null
- assertArrayEquals(“message”,A,B),判断A数组与B数组是否相等
Junit4测试代码实例
- @BeforeClass和@AfterClass需要是静态方法
public class MyServiceTest {
private MyService myService;
private String msg = "Hello world!";
@BeforeClass
public static void beforeClassTest() {
System.out.println("单元测试开始之前执行初始化........");
System.out.println("----------------------------");
}
@Before
public void beforeTest() {
System.out.println("单元测试方法开始之前执行.........");
myService = new MyService();
}
@Test
public void test1() {
myService.print(msg);
assertEquals("Hello world!", myService.print(msg));
}
@Test
public void test2() {
myService.print(msg);
assertEquals(msg, myService.print(msg));
}
@Test
public void test3() {
myService.print(msg);
assertEquals("hello", myService.print(msg));
}
@After
public void afterTest(){
System.out.println("单元测试方法结束后执行..............");
}
@AfterClass
public static void afterClass(){
System.out.println("---------------------------");
System.out.println("单元测试结束之后执行.........");
}
}
Suite
用来一次性运行多个测试用例,
@RunWith(Suite.class)
@Suite.SuiteClasses({MyServiceTest.class})
public class Test1 {
//虽然它是空的,但是它会将@Suite.SuiteClasses()中的所有测试方法执行一遍
}
Spring boot单元测试
1. 在pom中添加依赖
提供许多测试库
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
2. Spring boot测试脚手架
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyService myService;
@Test
public void testService(){
}
}
3.测试Service
- Service测试完成后数据回滚
单元测试默认会在结束后进行事务回滚 - Service依赖其他未开发完成的Service
Spring boot会集成Mockito模拟为完成的Service - 模拟真实的面向数据库事务
使用@Sql执行Sql脚本初始化数据
测试类代码
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
//@Rollback(false)
public class MyControllerTest {
@Autowired
TestService testService;
@Test
public void select() {
System.out.println(testService.select());
}
@Test
public void insert() {
com.example.rediscache.pojo.Test test = new com.example.rediscache.pojo.Test();
test.setName("李四");
System.out.println(testService.insert(test));
System.out.println(test);
System.out.println(testService.select());
}
@Test
public void update() {
com.example.rediscache.pojo.Test test = new com.example.rediscache.pojo.Test();
test.setId(3);
test.setName("李云龙");
System.out.println(testService.update(test));
}
@Test
public void delete() {
System.out.println(testService.delete(3));
}
}
Service代码
@Service
public class TestService {
@Autowired
TestMapper testMapper;
public List<Test> select(){
return testMapper.select();
}
public int insert(Test test){
return testMapper.insert(test);
}
public int update(Test test){
return testMapper.update(test);
}
public int delete(int id){
return testMapper.delete(id);
}
}
Mapper代码
@Mapper
public interface TestMapper {
@Select("SELECT * FROM test1")
public List<Test> select();
@Insert("INSERT INTO test1(name) VALUES(#{name})")
@Options(useGeneratedKeys = true, keyProperty = "id")
public int insert(Test test);
@Delete("DELETE FROM test1 WHERE id=#{id}")
public int delete(int id);
@Update("UPDATE test1 SET name=#{name} WHERE id=#{id}")
public int update(Test test);
}