SpringBoot项目示例
本章节基于SpringBoot项目提供对应的自动生成UT测试用例的示例代码,仅供参考。
对于SpringBoot项目,能够根据@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; @Mock private WhiteTiger whiteTigerMock; @Mock private WhiteMonkey whiteMonkeyMock; private AutoCloseable mockitoCloseable; ///region Test suites for executable com.ruoyi.web.controller.common.Zoo.toString ///region SYMBOLIC EXECUTION: SUCCESSFUL EXECUTIONS for method toString() /** * @utbot.classUnderTest {@link Zoo} * @utbot.methodUnderTest {@link Zoo#toString()} * @utbot.invokes {@link com.ruoyi.web.controller.demo.domain.Tiger#getColor()} * @utbot.invokes {@link com.ruoyi.web.controller.demo.domain.Monkey#getColor()} * @utbot.returnsFrom {@code return tiger.getColor() + "\n" + monkey.getColor();} */ @UTgen("toString()") @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() /** * @utbot.classUnderTest {@link Zoo} * @utbot.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); } @AfterEach public void tearDown() throws Exception { mockitoCloseable.close(); } }
父主题: 案例Demo