【发布时间】:2017-07-06 21:34:20
【问题描述】:
我的班级不能自动装配 UserService - 它会抛出 NullPointerException。我想找到一种方法来测试 UserValidator 类。我不知道如何在 ExistingValidationRule 类中注入模拟。
public class ExistingValidationRule implements RegistrationRule<User> {
@Autowired
private UserService service;
@Override
public void validate(User user, Errors errors) {
service.find(user, errors);
}
}
@Component
public class UserValidator implements Validator {
@Override
public void validate(Object o, Errors errors) {
User user = (User) o;
rules.add(new ExistingValidationRule());
for(RegistrationRule<User> rule : rules){
rule.validate(user, errors);
}
}
}
public class UserValidatorTest {
@InjectMocks
private UserValidator userValidator;
@InjectMocks
private ExistingValidationRule existingValidationRule;
@Mock
private UserService service;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testValidUser() throws Exception{
userValidator.validate(createdUser,errors);
}
【问题讨论】:
-
如果你使用
new创建Spring bean实例,它们就不再是Spring bean实例,因此不能被Spring自动装配,它甚至无法知道这个实例是否存在。将 ExistingValidationRule 实例自动装配到 UserValidator 中。 -
当你的大部分问题都被否决时,你就是在做一些惹恼很多人的事情。或许没有功课就是答案。
标签: java spring unit-testing mockito