在做单元测试时,可能同一个方法需要传很多个不同的参数进行测试,但是写一个测试参数写一个测试方法会比较冗余,那么有什么办法可以将一组参数进行测试吗?答案是有的。
使用 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
@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 "";
}
}
运行结果如下:
如有问题可以下方留言~
喜欢的朋友欢迎一键三连。我们一起学习,进步~~



