Mockito无法模仿原始类型

时间:2016-07-12 04:36:34

标签: spring unit-testing mockito

我为我的一个使用Integer类型作为@Autowired依赖项的验证器编写单元测试。

现在,在编写测试时,我无法像Spring所说的那样@Mock -

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的原因。

1 个答案:

答案 0 :(得分:1)

为什么不为这个属性创建一个setter?

此外,您可以为MyValidator创建一个构造函数,并在那里注入Autowired属性。这使得测试变得更加容易。

示例:

public class MyValidator {

@Autowired
public MyValidator(Integer intervalInDays, LanguageValidator languageValidator, IdValidator idValidator) {
//Set your global attributes
}
}

Here it's explained why @InjectMock is not really a good practice.