Spring Boot项目示例
本章节基于Spring Boot项目提供对应的自动生成UT测试用例的示例代码,仅供参考。
对于Spring Boot项目,能够根据@Configuration注解的配置类,在测试用例中生成包含指定类型的测试用例。
@Configuration:Spring配置类,分析该注解所在类中的Bean定义,用于确定生成测试用例时的类型约束,即生成的测试用例使用该Bean的类型。
需要生成测试用例的代码(Java代码):
@Component
public class Zoo
{
@Autowired
private Tiger tiger;//Tiger是一个接口,有多个实现,测试用例中使用Spring的Bean定义的WhiteTiger。
@Autowired
private Monkey monkey;//Monkey是一个接口,有多个实现,测试用例中使用Spring的Bean定义的WhiteMonkey。
public String toString()
{
return tiger.getColor() + "\n" + monkey.getColor();
}
}
//Tiger接口
public interface Tiger {
String getColor();
}
//Tiger的实现
public class BlackTiger implements Tiger{
@Override
public String getColor() {
return "black";
}
}
//Tiger的实现
public class WhiteTiger implements Tiger{
@Override
public String getColor(){
return "white";
}
}
//Monkey的接口
public interface Monkey {
String getColor();
}
//Monkey的实现
public class BlackMonkey implements Monkey{
@Override
public String getColor() {
return "black";
}
}
//Monkey的实现
public class WhiteMonkey implements Monkey{
@Override
public String getColor(){
return "white";
}
}
配置文件是指在生成测试用例对话框中选择的Spring配置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public Zoo zoo()
{
return new Zoo();
}
@Bean
public Tiger tiger()
{
return new WhiteTiger();//Spring中Bean定义
}
@Bean
public Monkey monkey()
{
return new WhiteMonkey();//Spring中Bean定义
}
}
那么生成的UT用例里tiger和monkey类型就是WhiteTiger和WhiteMonkey,对应的UT测试用例:
public final class ZooTest {
@InjectMocks
private Zoo zoo; //@InjectMocks自动创建一个Zoo对象,并将@Mock标记的对象注入到Zoo对象中。
@Mock
private WhiteTiger whiteTigerMock; //@Mock自动创建一个WhiteTiger类型Mock对象,待注入到Zoo对象中。
@Mock
private WhiteMonkey whiteMonkeyMock; //@Mock自动创建一个WhiteMonkey类型Mock对象,待注入到Zoo对象中。
private AutoCloseable mockitoCloseable; //用于Mockito资源清理
///region Test suites for executable com.ruoyi.web.controller.common.Zoo.toString
///region SYMBOLIC EXECUTION: SUCCESSFUL EXECUTIONS for method toString()
/**
* @utgen.classUnderTest {@link Zoo}
* @utgen.methodUnderTest {@link Zoo#toString()}
* @utgen.invokes {@link com.ruoyi.web.controller.demo.domain.Tiger#getColor()}
* @utgen.invokes {@link com.ruoyi.web.controller.demo.domain.Monkey#getColor()}
* @utgen.returnsFrom {@code return tiger.getColor() + "\n" + monkey.getColor();}
*/
@UTgen("toString()") //@UTgen标注当前测试方法是UTgen工具生成的,其属性为被测试方法签名
@Test
@DisplayName("toString: TigerGetColor -> return tiger.getColor() + \"\\n\" + monkey.getColor()")
public void testToString_MonkeyGetColor() {
(when(whiteTigerMock.getColor())).thenReturn(((String) null));
(when(whiteMonkeyMock.getColor())).thenReturn(((String) null));
String actual = zoo.toString();
String expected = "null\nnull";
assertEquals(expected, actual);
}
///endregion
///region FUZZER: SUCCESSFUL EXECUTIONS for method toString()
/**
* @utgen.classUnderTest {@link Zoo}
* @utgen.methodUnderTest {@link Zoo#toString()}
*/
@UTgen("toString()")
@Test
@DisplayName("toString: ")
public void testToString() throws ClassNotFoundException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {
WhiteTiger whiteTiger = new WhiteTiger();
setField(zoo, "com.ruoyi.web.controller.common.Zoo", "tiger", whiteTiger);
WhiteMonkey whiteMonkey = new WhiteMonkey();
setField(zoo, "com.ruoyi.web.controller.common.Zoo", "monkey", whiteMonkey);
String actual = zoo.toString();
String expected = "white\nwhite";
assertEquals(expected, actual);
}
///endregion
///endregion
@BeforeEach
public void setUp() {
mockitoCloseable = openMocks(this); //初始化@Mock和@InjectMocks注解,并返回一个AutoCloseable对象,用于资源清理。
}
@AfterEach
public void tearDown() throws Exception {
mockitoCloseable.close(); //释放Mockito内部资源,清理与当前测试相关的Mock注册信息,避免资源泄漏或状态污染。
}
}
父主题: 案例Demo