Mockito无法模拟原始类型

维沙尔

我为使用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
}
}

在这里解释了为什么@InjectMock不是真正的好习惯。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章