2015-05-14 20 views
9

Tôi nhầm lẫn với mục đích và sự khác biệt giữa kỳ vọng và xác minh. Ví dụ.Dự kiến ​​có phải là dự phòng nếu tôi có Xác minh trong thử nghiệm của mình không?

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    new Expectations() {{ 
     fooDao.delete(withEqual(1L)); times = 1; 
    }}; 

    fooService.delete(1L); 

    new Verifications() {{ 
     Long id; 
     fooDao.delete(id = withCapture()); times = 1; 
     Assert.assertEquals(1L, id); 
    }}; 
} 

Trước hết, vui lòng cho tôi biết nếu bài kiểm tra này được viết/suy nghĩ kém.

Thứ hai, câu hỏi của tôi: phần kỳ vọng dường như dư thừa đối với tôi và tôi không thể đưa ra một ví dụ mà nó sẽ không xảy ra.

+0

Tôi đã thay đổi tiêu đề để phản ánh tốt hơn câu hỏi của bạn ở dưới cùng của trang. Nếu tôi hiểu nhầm câu hỏi, hãy hoàn nguyên thay đổi của tôi. – Thunderforge

+0

Chủ đề cũ, tôi biết, nhưng sự hiểu biết của tôi là, lỏng lẻo và nghiêm túc: Một khối 'Kỳ vọng' xử lý những thứ mà _may_ xảy ra; khối 'Verifications' xử lý những thứ mà _must have_ đã xảy ra. –

Trả lời

12

Mục đích của Expectations là cho phép thử nghiệm ghi lại các kết quả mong đợi cho các phương thức và/hoặc nhà thầu được chế nhạo, nếu cần theo mã được kiểm tra.

Mục đích của Verifications là cho phép thử nghiệm để xác minh yêu cầu được mong đợi để phương thức giả và/hoặc nhà thầu, như được thực hiện bởi mã đang được thử nghiệm. Vì vậy, thông thường, một thử nghiệm sẽ không thể ghi cả xác minh cùng một kỳ vọng (trong đó "kỳ vọng" chỉ định một tập hợp các lời gọi đến phương thức/nhà xây dựng giả định được mong đợi xảy ra khi mã đang được thử nghiệm được thực hiện).

Với ý nghĩ đó, các thử nghiệm ví dụ sẽ trông như thế này:

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    fooService.delete(1L); 

    new Verifications() {{ fooDao.delete(1L); }}; 
} 
+0

Tôi vẫn không hiểu điều này. Trong ví dụ của bạn, bạn có thể đạt được cùng với một khối Mong đợi, phải không? Khi nào bạn cần một khối Xác minh? – T3rm1

+1

Bạn "cần" một khối xác minh khi bạn muốn viết kiểm tra theo ["Arrange Act Assert"] (http://c2.com/cgi/wiki?ArrangeActAssert) hoặc ["Given When Then"] (http: //martinfowler.com/bliki/GivenWhenThen.html) phong cách. –

+0

@ Rogério Tôi hiểu câu trả lời này, nhưng tại sao bạn có thể đặt xác minh trong khối kỳ vọng? ví dụ: 'times',' minTimes' vv Kịch bản nào sẽ muốn sử dụng các xác minh này trong một khối mong đợi? – PDStat

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