---
title: Spring Boot项目示例
description: "本章节基于Spring Boot项目提供对应的自动生成UT测试用例的示例代码，仅供参考。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/development/utgen/UTgen_0018.html
sourcePath: /source/zh/kunpengdevps/development/utgen/UTgen_0018.html
indexId: 21f68b11eeb7f29743d377350d2391341e1b66a8bb505fc7cdac8c58229eb82257
---
# 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注册信息，避免资源泄漏或状态污染。
}
}
```
