junit.textui.TestRunner
phù hợp với Observer pattern, nhưng đó là quan sát viên , không phải là đối tượng . Ít nhất, nó sẽ là người quan sát — nó không còn nữa.
JUnit hiển thị giao diện TestListener: Lớp TestResult chạy TestCase, gọi phương thức riêng của mình startTest
và endTest
. TestResult cũng chứa một danh sách các cá thể TestListener, và thông báo cho tất cả chúng bất cứ khi nào một thử nghiệm được bắt đầu hoặc kết thúc. Đây là mẫu Observer tinh túy: TestResult là chủ đề, thông báo cho bộ sưu tập các cá thể TestListener của nó, một trong số đó có thể là TestRunner tự thêm vào danh sách.
Điều đó nói rằng, TestRunner doesn't currently add itself as a listener to TestResult và có các triển khai trống của các yêu cầu testStarted
, testEnded
và testFailed
phương pháp. Thay vào đó, nó sẽ thêm ResultPrinter vào danh sách Người nghe; Tôi cho rằng đây là yếu tố ngoài TestRunner tại một thời điểm nào đó.
Vì vậy, TestRunner được thiết lập thành Observer, nhưng nó không còn hoạt động như một. Tất cả đã nói, điều này thực sự thể hiện sức mạnh của các mẫu thiết kế: Nó cho phép cơ hội tái cấu trúc mã và hành vi riêng biệt bằng cách mã hóa dựa trên các giao diện cụ thể đó.
Nguồn
2014-04-12 06:21:01
Xin chào và chào mừng bạn đến với SO. Trang web này là để giúp mọi người giải quyết các vấn đề lập trình cụ thể của họ. Vui lòng xem trung tâm trợ giúp http://stackoverflow.com/help để xem câu hỏi nào và cách bạn nên hỏi tại đây. –
@Ean Điều này có vẻ giống như một "vấn đề thực tế, có thể trả lời" là "duy nhất cho phát triển phần mềm". Có một chút tinh tế với nó, quá - TestRunner thực hiện TestListener nhưng dường như không sử dụng nó. –