Я пишу блок-тест для одного из моих валидаторов, которые используют тип Integer как зависимость @Autowired
.Mockito не может издеваться над примитивными типами
Теперь, во время написания теста я не в состоянии @Mock
это как весна говорит -
org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.Integer
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
Как я должен получить вокруг него?
Мой валидатор выглядит this-
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
}
}
Тест для этого валидатор класса выглядит this-
@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.
Если только для теста, я должен предоставить сеттер, чем почему я буду использовать автоматическое связывание? Это похоже на то, что я даю два способа установить зависимость. – Vishal
Сначала вы можете сделать видимым только ваш сеттер. Во-вторых, это поможет сделать ваш код более легким. На самом деле я никогда не использовал '@ InjectMocks', так как я написал свой код, как будто я могу вводить свои свойства. В-третьих, вы все равно можете пойти на конструктор. – questionare
Кроме того, здесь http://stackoverflow.com/questions/2457239/injecting-mockito-mocks-into-a-spring-bean?rq=1 вы можете увидеть множество способов, как вводить насмешки. – questionare