在进行单元测试的时候,需要对相关属性进行注入,我们可以将需要注入的数据写在yml文件里面。
application.yml文件
test:
prop: testValue
PropertiesAndArgsTest类文件
package com.bubaiwantong;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
//properties 为当前测试添加测试属性值
//args 为当前命令行参数值 记得要加--才可以生效,不然会发生报错
//@SpringBootTest(properties = {"test.prop=testValue2"})
@SpringBootTest(args = {"--test.prop=testValue2"})
public class PropertiesAndArgsTest {
@Value("${test.prop}")
private String msg;
@Test
public void testProperties(){
System.out.println(msg);
}
}
注意:properties 为当前测试添加测试属性值,args 为当前命令行参数值 记得要加–才可以生效,不然会发生报错
MsgConfig配置类
@Configuration
public class MsgConfig {
@Bean
public String msg(){
return "bean msg";
}
}
ConfigurationTest测试类
package com.bubaiwantong;
import com.bubaiwantong.config.MsgConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
@SpringBootTest
@Import({MsgConfig.class})
public class ConfigurationTest {
@Autowired
private String msg;
@Test
public void testConfiguration(){
System.out.println(msg);
}
}
有时候我们需要用到数据库进行测试,而在测试的时候,测试的相关操作会对数据库进行一些增删改查的相关操作,这个时候测试会在数据库插入许多垃圾数据。而我们的目的是想测试完成之后,数据库里面的内容不发生变化,这个问题可以使用事务来进行解决。
在springboot中,我们可以使用下面两个注解来完成。
@Transactional
@Rollback(true)
application.yml配置文件
server:
port: 80
spring:
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssmp_db?serverTimezone=GMT
username: root
password: 123456
mybatis-plus:
global-config:
db-config:
table-prefix: tb_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
Book实体类
package com.bubaiwantong.domain;
import lombok.Data;
@Data
public class Book {
private Integer id;
private String name;
private String type;
private String description;
}
Dao层 :BookDao
package com.bubaiwantong.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bubaiwantong.domain.Book;
import org.apache.ibatis.annotations.Mapper;
/**
* dao层
* 使用mybatis-plus提供好的接口,实现basedMapper的泛型
*/
@Mapper
public interface BookDao extends BaseMapper {
}
Service接口
package com.bubaiwantong.service;
import com.bubaiwantong.domain.Book;
public interface BookService {
public boolean save(Book book);
}
service实现类
package com.bubaiwantong.service.impl;
import com.bubaiwantong.dao.BookDao;
import com.bubaiwantong.domain.Book;
import com.bubaiwantong.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public boolean save(Book book) {
return bookDao.insert(book) > 0;
}
}
BookServiceTest测试类
package com.bubaiwantong;
import com.bubaiwantong.domain.Book;
import com.bubaiwantong.service.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;
@SpringBootTest
@Transactional
@Rollback(true)
public class BookServiceTest {
@Autowired
private BookService bookService;
@Test
void test(){
Book book = new Book();
book.setName("springboot");
book.setType("springboot");
book.setDescription("springboot");
bookService.save(book);
}
}
可以看到,测试之后不会对数据库产生新数据,这样我在打包部署项目的时候,就可以对项目进行直接测试了。
我们使用springboot进行单元测的时候,总不能一个一个的创造数据吧,我们可以将使用随机函数创建随机值,注入到bean中,然后使用bean进行测试。
application.yml文件
testcase:
book:
id: ${random.int}
name: 黑马${random.value}
type: ${random.long}
description: ${random.uuid}
BookCase类
package com.bubaiwantong.test.domian;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@Data
@ConfigurationProperties(prefix = "testcase.book")
public class BookCase {
private int id;
private String name;
private String type;
private String description;
}
BookCaseTest测试类
package com.bubaiwantong;
import com.bubaiwantong.test.domian.BookCase;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookCaseTest {
@Autowired
private BookCase bookCase;
@Test
void test(){
System.out.println(bookCase);
}
测试结果: