2014-04-11 10 views
5

Tôi đã cố gắng hiểu mẫu thiết kế được sử dụng cho lớp TestRunner (gói junit.textui) của JUnit. Lớp TestRunner đang mở rộng một người nghe và có một tham chiếu của người nghe.mẫu thiết kế nào được sử dụng cho lớp TestRunner trong junit

Nếu đó là mẫu thiết kế Observer, thì tại sao nó là trình nghe mở rộng? nó chỉ nên có tham chiếu của người nghe.

+0

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. –

+1

@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ó. –

Trả lời

3

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 startTestendTest. 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, testEndedtestFailed 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ể đó.

Các vấn đề liên quan