鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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();
    }
}