我有一个用于电子邮件验证的类。该类具有两个私有String字段,我从其中注入了application.properties
中的一个值。
public class EmailValidation {
private final String someString = "xyz"
@Value("${regex}")
private String emailRegex;
// methods
}
public class EmailValidaitonTest {
private final EmailValidation obj = new EmailValidation();
//missing emailRegex
}
现在我必须为此编写一个单元测试。该类没有依赖性,因此我决定将new
类中的EmailValidationTest
运算符用于该类对象。现在,我可以访问字符串someString
,但是我不能使用emailRegex
的值,因为它是由Spring注入的。我该如何在测试类中设置其值,并希望其值与application.properties
中的值相同。
答案 0 :(得分:1)
如果您可以在不加载Spring上下文的情况下编写单元测试,则是更可取的。您可以像这样设置课程:
public class EmailValidation {
private final String regex;
@Autowired
EmailValidation (@Value("${regex:}") String regex) {
this.regex = regex;
}
}
现在在测试类中,您可以通过构造函数参数实例化emailValidation类。
private final EmailValidation obj = new EmailValidation("myRegex");
正如@JB Nizet指出的,最好为有效的电子邮件正则表达式设置一个静态的final字段,或者只通过一个库调用。
答案 1 :(得分:1)
您使用ReflectionTestUtils.setField
在测试用例中注入属性值。
public class EmailValidationTest{
private @InjectsMock EmailValidation validation;
private String emailRegexPattern = "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$";
@BeforeAll
public void setUp(){
ReflectionTestUtils.setField(validation, "emailRegex", emailRegexPattern);
}
//your test cases over here.
}