Я пытаюсь проверить класс, который имеет интерфейс с 3 аргументами. Метод тестирования Я подобен этомуПроверка интерфейса с проверкой Mockito
formElementCallback.stateChanged(formElement1, FormElementState.DISABLED, "");
formElementCallback.stateChanged(formElement2, FormElementState.DISABLED, null);
и это метод испытания
Mockito.verify(mockFormElementCallback, Mockito.atLeastOnce()).stateChanged(Mockito.argThat(new ArgumentMatcher<FormElement>() {
@Override
public boolean matches(Object argument) {
//matcher for formObject
FormElement formElement = (FormElement) argument;
return true;
}
}), Mockito.argThat(new ArgumentMatcher<FormElementState>() {
@Override
public boolean matches(Object argument) {
//matcher for state
return true;
}
}), Mockito.argThat(new ArgumentMatcher<Comparable>() {
@Override
public boolean matches(Object argument) {
//matcher for value
return true;
}
}));
Поскольку интерфейс называется 2 раза, Mockito.verify (объект, Mockito.times (1) не работает.Я попытался объединить логику с atLeastOnce(), но тогда всякий раз, когда я утверждаю formElement1, formElement2 вызывается слишком, чтобы тест не удался. И даже если я использую оператор if, область сопряжения для значения и состояния не будет знать о формы формы.
Есть ли ва что я могу так утверждать?
If argument equals formElement1, Assert state DISABLED, Assert value ""
If argument equals formElement2, Assert state DISABLED, Assert value null
Else AssertTrue(false) since interface must not be called with other form elements.
Редактировать: Решение не должно состоять в том, чтобы объединить 3 аргумента в один и поместить состояние и значение в класс formElement. Это связано с тем, что внешние классы не получают доступ к самому элементу formElement и изменяют состояние вручную. Существует и другая реализация: .stateChanged (тип FormElementType, состояние FormElementState, сравнимое значение);
Нет, как я уже говорил, когда я проверяю подобное, сначала проверьте, не удалось ли из-за вызова stateChanged (formElement2, DISABLED, ""), а второе не выполнено из-за stateChanged (formElement1, DISABLED, null). Именно по этой причине я попытался объединить две логики в одну. –
Mockito сохраняет и сохраняет все взаимодействия. Каждая проверка проверяет одно согласование. Каждый из них специфичен для поведения по умолчанию ('times (1)'). Если они выходят за рамки этого, это, вероятно, потому, что матчи не достаточно специфичны. У вас нет анонимных встроенных совпадений, которые всегда возвращают 'true' за пределами этого примера, не так ли? –