Câu hỏi hoàn chỉnh hơn là, với sự phụ thuộc kỳ vọng gọi lại làm tham số, làm cách nào để viết một bài kiểm tra đơn vị bao gồm logic gọi lại và vẫn quản lý để giả lập phụ thuộc?Làm thế nào để đơn vị kiểm tra gọi lại logic?
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*/)
}
}
Trong ví dụ trên, tôi sẽ thử stuffToDo
vì tôi nên xác minh cuộc gọi và kết xuất đầu ra của cuộc gọi phương thức. Tuy nhiên, chế nhạo runThis
kết quả trong logic gọi lại không được kiểm tra. Hơn nữa, gọi lại logic có vẻ như nó nên được tư nhân vì vậy tôi sẽ không mong đợi để kiểm tra nó trực tiếp; có lẽ đó là một quan niệm sai lầm về phía tôi.
Kể từ khi gọi lại được sử dụng khá rộng rãi, tôi hy vọng sẽ có một phương pháp phổ biến để thử nghiệm chúng nhưng tôi đã không tìm thấy nó.
Cuộc gọi lại chỉ cần được kiểm tra trong ngữ cảnh này? Nếu vậy, tại sao không chỉ đơn giản là viết các bài kiểm tra cho các callbacks khác nhau mà bạn có kế hoạch đi qua, trong đó thể hiện mong đợi của bạn về kết quả của họ? Tui bỏ lỡ điều gì vậy? – Jonah
Bạn đã thử sử dụng CountDownLatch giống như trong ví dụ này: http://stackoverflow.com/a/3802487/2301224 – Baker