Более полный вопрос заключается в том, что, учитывая зависимость, которая ожидает обратного вызова в качестве параметра, как написать unit test, который охватывает логику обратного вызова и все еще удается макетировать зависимость?
public class DoStuff {
public void runThis(Runnable callback) {
// call callback
}
}
public class ClassUnderTest {
private DoStuff stuffToDo;
public void methodUnderTest() {
this.stuffToDo.runThis(/*a runnable with some logic*/)
}
}
В приведенном выше примере я бы издевался над stuffToDo
, так как я должен проверять вызовы и выписывать выходы вызовов методов. Однако издевательская runThis
приводит к тому, что логика обратного вызова не тестируется. Кроме того, логика обратного вызова кажется, что она должна быть частной, поэтому я не ожидал бы ее проверить непосредственно; возможно, это неправильное представление с моей стороны.
Поскольку обратные вызовы используются довольно экстенсивно, я бы ожидал, что их будет распространенным методом для их тестирования, но я его не нашел.