栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java单元测试--参数化测试Parameterized的使用示例介绍

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java单元测试--参数化测试Parameterized的使用示例介绍

在做单元测试时,可能同一个方法需要传很多个不同的参数进行测试,但是写一个测试参数写一个测试方法会比较冗余,那么有什么办法可以将一组参数进行测试吗?答案是有的。
使用 Parameterized,在测试运行期允许使用者使用不同参数多次运行同一个测试。
下面是代码示例:
pom坐标:



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.5.5
         
    
    com.example
    loan-server
    0.0.1-SNAPSHOT
    loan-server
    loan-server
    
        1.8
        1.16.0
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.projectlombok
            lombok
            1.18.12
            provided
        
        
            com.alibaba
            fastjson
            1.2.24
        
        
            org.springframework.boot
            spring-boot-starter-test
            
                
                    org.junit.jupiter
                    junit-jupiter
                
            
            test
        
        
            org.junit.vintage
            junit-vintage-engine
            test
        
        
        
            junit
            junit
            4.12
            test
        
        
        
            org.jmockit
            jmockit
            1.19
            test
        
        
            com.h2database
            h2
            1.4.197
            test
        
    
    
        
            
                org.testcontainers
                testcontainers-bom
                ${testcontainers.version}
                pom
                import
            
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    



单元测试代码

@RunWith(Parameterized.class)
public class ValidatorTest {

    private static final String MAX_MALE_AND_LOAN_AGE = "65";
    private static final String MAX_LOAN_HOUSE_AGE = "40";
    private static final String MAX_FEMALE_AND_LOAN_AGE = "60";
    private Gender gender;
    private Integer lenderAge;
    private Integer loanAge;
    private Integer houseAge;
    private boolean canLoan;
    private String failMessage;

    public ValidatorTest(Gender gender, Integer lenderAge, Integer loanAge, Integer houseAge, boolean canLoan, String failMessage) {
        this.gender = gender;
        this.lenderAge = lenderAge;
        this.loanAge = loanAge;
        this.houseAge = houseAge;
        this.canLoan = canLoan;
        this.failMessage = failMessage;
    }

    @Parameterized.Parameters
    public static Collection data() {
        return Arrays.asList(new Object[][]{
                {Gender.MALE, 35, 30, 0, true, ""},
                {Gender.MALE, 36, 30, 0, false, "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE},
                {Gender.MALE, 34, 32, 0, false, "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE},
                {Gender.MALE, 35, 25, 16, false, "贷款年限_房龄不超过" + MAX_LOAN_HOUSE_AGE},
                {Gender.FEMALE, 30, 30, 0, true, ""},
                {Gender.FEMALE, 31, 30, 0, false, "女性_主贷款人年龄_贷款年限不超过" + MAX_FEMALE_AND_LOAN_AGE}
        });
    }

    @Test
    public void validate_user_loan_result() throws Exception {
        //given
        UserLoanPlanMaterial user = new UserLoanPlanMaterial();
        user.setLenderAge(lenderAge);
        user.setGender(gender);
        HouseMaterial houseMaterial = new HouseMaterial();
        houseMaterial.setAge(houseAge);
        user.setHouseMaterial(houseMaterial);
        //when
        String result = Validator.check(user, loanAge);
        //then
        Assert.assertEquals(result, failMessage);
    }
}

实体类两个

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class HouseMaterial {
    private Integer age;
    private BigDecimal price;
}
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserLoanPlanMaterial {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String idCard;
    private String name;
    private Gender gender;
    private BigDecimal income;
    private Integer lenderAge;

    private TogetherLender togetherLender;
    private HouseMaterial houseMaterial;

    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;

}

枚举类一个

public enum Gender {
    FEMALE, MALE
}

接口代码

public class Validator {

    private static final int MAX_MALE_AND_LOAN_AGE = 65;
    private static final int MAX_FEMALE_AND_LOAN_AGE = 60;
    private static final int MAX_LOAN_HOUSE_AGE = 40;

    public static String check(UserLoanPlanMaterial user, Integer loanAge) {
        if (user.getGender().equals(Gender.MALE) && (user.getLenderAge() + loanAge > MAX_MALE_AND_LOAN_AGE)) {
            return "男性_主贷款人年龄_贷款年限不超过" + MAX_MALE_AND_LOAN_AGE;
        }
        if (user.getGender().equals(Gender.FEMALE) && (user.getLenderAge() + loanAge > MAX_FEMALE_AND_LOAN_AGE)) {
            return "女性_主贷款人年龄_贷款年限不超过" + MAX_FEMALE_AND_LOAN_AGE;
        }
        if (user.getHouseMaterial().getAge() + loanAge > MAX_LOAN_HOUSE_AGE) {
            return "贷款年限_房龄不超过" + MAX_LOAN_HOUSE_AGE;
        }
        return "";
    }
}

运行结果如下:
如有问题可以下方留言~
喜欢的朋友欢迎一键三连。我们一起学习,进步~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号