我为使用Integer类型作为@Autowired
依赖项的验证程序之一编写了单元测试。
现在,在编写测试时,我不能@Mock
像Spring所说的那样-
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Integer
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
我应该如何解决?
我的验证器看起来像这样-
public class MyValidator {
@Autowired
@Qualifier(value = "intervalInDays")
private Integer intervalInDays; // does not get mocked!!
@Autowired
private LanguageValidator languageValidator;
@Autowired
private IdValidator idValidator;
public void validate(Request request) {
//does some validations
}
}
这个验证器类的测试看起来像这样-
@RunWith(MockitoJUnitRunner.class)
public class MyValidatorTest {
@InjectMocks
private MyValidator myValidator; //isnt mocked at all
@Mock
private LanguageValidator languageValidator; //works fine
@Mock
private IdValidator idValidator; //works fine
@Mock(name = "intervalInDays")
private Integer intervalInDays;
//some tests here
}
请提出一个解决方案,因为intervalInDays
未能引用上述Mockito的原因进行模拟。
您为什么不只为此属性创建一个setter?
此外,您可以为其创建构造函数MyValidator
并将Autowired属性注入其中。这使测试更加容易。
例子:
public class MyValidator {
@Autowired
public MyValidator(Integer intervalInDays, LanguageValidator languageValidator, IdValidator idValidator) {
//Set your global attributes
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句