Предположим, у меня есть класс с двумя методами, где я не волнует, что называется ...Как я могу проверить, вызван ли один из двух методов с помощью Mockito?
public class Foo {
public String getProperty(String key) {
return getProperty(key, null);
}
public String getProperty(String key, String defaultValue) {
//...
}
}
И ниже (от другого класса, до сих пор в моем приложении) должны пройти мой тест:
public void thisShouldPass(String key) {
// ...
String theValue = foo.getProperty(key, "blah");
// ...
}
public void thisShouldAlsoPass(String key) {
// ...
String theValue = foo.getProperty(key);
if (theValue == null) {
theValue = "blah";
}
// ...
}
Мне все равно, что было вызвано, я просто хочу, чтобы один из двух вариантов был вызван.
В Mockito, я вообще могу сделать что-то вроде этого:
Mockito.verify(foo, atLeastOnce()).getProperty(anyString());
Или:
Mockito.verify(foo, atLeastOnce()).getProperty(anyString(), anyString());
Есть ли собственный способ сказать «проверить либо один, либо другой произошло по крайней мере, один раз"?
Или я должен сделать что-то, как нефть, как:
try {
Mockito.verify(foo, atLeastOnce()).getProperty(anyString());
} catch (AssertionError e) {
Mockito.verify(foo, atLeastOnce()).getProperty(anyString(), anyString());
}
Мне это нравится! Я думал, что аргумент ArgumentCaptor был устаревшим, но на самом деле кажется, что конструктор устарел, ваш метод 'forClass' по-прежнему пользуется преимуществом. Я предполагаю 'atLeast (0)' потому, что вам нужно вызвать 'verify', чтобы прикрепить' ArgumentCaptor'? – Kidburla
Точно верно. Я часто использую 'ArgumentCaptor' для этих типов вещей (хотя это не так), это очень удобно. Пока я не посмотрел его, я даже не знал, что 'atLeast (0)' возможно - в более ранних версиях Mockito этого не было. – ach
Я просто заметил, что 'ArgumentCaptor' не следует использовать с stubbing в соответствии с JavaDoc. Я думаю, что мне, возможно, придется это сделать, поскольку я собираю оба варианта getProperty. Я также смущен, когда в приведенном выше фрагменте мне нужно вызвать 'thisShouldPass' или' thisShouldAlsoPass'. Несомненно, 'ArgumentCaptor' не может быть прикреплен * после * Я запустил эти методы? – Kidburla