Tôi đang sử dụng GWTP, thêm một lớp Hợp đồng để trừu tượng kiến thức giữa Người trình bày và Chế độ xem và tôi khá hài lòng về kết quả với GWTP. Tôi đang thử nghiệm diễn giả của mình với Mockito.Thử nghiệm trình trình bày GWTP với các cuộc gọi không đồng bộ
Nhưng khi thời gian trôi qua, tôi thấy rất khó để duy trì một người trình bày rõ ràng với các bài kiểm tra của nó. Có một số công cụ tái cấu trúc tôi đã làm để cải thiện điều đó, nhưng tôi vẫn không hài lòng.
Tôi thấy nội dung sau là trung tâm của vấn đề: Người thuyết trình của tôi cần cuộc gọi không đồng bộ hoặc thường gọi đến phương thức đối tượng với gọi lại để tiếp tục luồng trình bày của tôi (thường được lồng nhau).
Ví dụ:
this.populationManager.populate(new PopulationCallback()
{
public void onPopulate()
{
doSomeStufWithTheView(populationManager.get());
}
});
Trong các thử nghiệm của tôi, tôi đã kết thúc để xác minh các cuộc gọi dân() của đối tượng PopulationManager chế giễu. Sau đó, để tạo một thử nghiệm khác trên phương thức doSomeStufWithTheView().
Nhưng tôi phát hiện khá nhanh rằng đó là thiết kế xấu: bất kỳ thay đổi hoặc tái cấu trúc nào đã kết thúc để phá vỡ nhiều thử nghiệm của tôi và buộc tôi tạo từ những người khác, mặc dù chức năng của người thuyết trình không thay đổi! Plus Tôi đã không kiểm tra xem cuộc gọi lại có hiệu quả những gì tôi muốn hay không.
Vì vậy, tôi cố gắng sử dụng Mockito phương pháp doAnswer để không phá vỡ dòng chảy thử nghiệm dẫn chương trình của tôi:
doAnswer(new Answer(){
public Object answer(InvocationOnMock invocation) throws Throwable
{
Object[] args = invocation.getArguments();
((PopulationCallback)args[0]).onPopulate();
return null;
}
}).when(this.populationManager).populate(any(PopulationCallback.class));
tôi yếu tố mã cho nó được ít verbose (và trong nội bộ ít phụ thuộc vào vị trí arg):
doAnswer(new PopulationCallbackAnswer())
.when(this.populationManager).populate(any(PopulationCallback.class));
Vì vậy, trong khi chế giễu populationManager, tôi có thể vẫn kiểm tra dòng chảy của người dẫn chương trình của tôi, về cơ bản như thế:
@Test
public void testSomeStuffAppends()
{
// Given
doAnswer(new PopulationCallbackAnswer())
.when(this.populationManager).populate(any(PopulationCallback.class));
// When
this.myPresenter.onReset();
// Then
verify(populationManager).populate(any(PopulationCallback.class)); // That was before
verify(this.myView).displaySomething(); // Now I can do that.
}
Tôi tự hỏi nếu nó là một sử dụng tốt của phương pháp doAnswer, hoặc nếu nó là một mùi mã, và một thiết kế tốt hơn có thể được sử dụng?
Thông thường, diễn giả của tôi có xu hướng chỉ sử dụng đối tượng khác (như một số mẫu hòa giải) và tương tác với chế độ xem. Tôi có một số người trình bày với hàng trăm (~ 400) dòng mã.
Một lần nữa, đó có phải là bằng chứng về thiết kế xấu, hoặc là bình thường đối với người trình bày là tiết mục (vì sử dụng các đối tượng khác)?
Có ai đã nghe về một số dự án sử dụng GWTP và kiểm tra người trình bày của mình một cách sạch sẽ không?
Tôi hy vọng tôi đã giải thích một cách toàn diện.
Cảm ơn bạn trước.
PS: Tôi khá mới với Stack Overflow, cộng với tiếng Anh của tôi vẫn còn thiếu, nếu câu hỏi của tôi cần một cái gì đó để được cải thiện, xin vui lòng cho tôi biết.
điều này thật hoàn hảo !!! +1 – EMM