Trong dự án của tôi, tôi đang gặp sự cố khi thực hiện kiểm tra đơn vị. Một vấn đề là chỉ cần làm một bài kiểm tra tích hợp là nhanh hơn nhiều để viết và cũng kiểm tra các thành phần thực sự làm việc cùng nhau. Đơn vị thử nghiệm cuốn tiểu thuyết "thuật toán" hoặc như vậy có vẻ dễ dàng hơn nhiều. Các lớp dịch vụ kiểm thử đơn vị nó chỉ cảm thấy sai và vô dụng.Dữ liệu mùa xuân: Kiểm tra đơn vị lớp dịch vụ
Tôi đang sử dụng mockito để kho lưu trữ dữ liệu mùa xuân giả (và do đó truy cập DB). Vấn đề là nếu tôi nói với kho lưu trữ giả để trả về thực thể A trên phương thức gọi getById, nó rõ ràng sẽ trả về nó và dịch vụ cũng sẽ trả về nó. Vâng, dịch vụ thực hiện một số công cụ bổ sung, nhưng những thứ rất nhỏ, như tải bộ sưu tập lười biếng (từ ngủ đông). Rõ ràng tôi không có bất kỳ bộ sưu tập lười biếng (proxy) trong một bài kiểm tra đơn vị.
Ví dụ:
@Test
public void testGetById() {
System.out.println("getById");
TestCompound expResult = new TestCompound(id, "Test Compound", "9999-99-9", null, null, null);
TestCompoundRepository mockedRepository = mock(TestCompoundRepository.class);
when(mockedRepository.findOne(id)).thenReturn(expResult);
ReflectionTestUtils.setField(testCompoundService, "testCompoundRepository",
mockedRepository, TestCompoundRepository.class);
TestCompound result = testCompoundService.getById(id);
assertEquals(expResult, result);
}
hoan hô, phần còn lại thành công. Thật bất ngờ! Không thực sự không.
Một số người có thể giải thích cho tôi những gì tôi đang làm sai? Nếu không thì điểm của thử nghiệm đó là gì? Tôi có nghĩa là tôi nói để trả lại expResult và sau đó nó được trả lại. Wow. Thật bất ngờ! Có vẻ như tôi đang thử nghiệm nếu mockito hoạt động chứ không phải Dịch vụ của tôi.
EDIT:
Lợi ích duy nhất tôi xem một số đã lỗi ngớ ngẩn xảy ra như để lại một dòng không mong muốn đó mà bộ trở lại giá trị null hay cái gì tương tự như ngu ngốc. Các trường hợp như vậy sẽ bị bắt bởi phép thử đơn vị. Tuy nhiên, tỷ lệ "nỗ lực thưởng" có vẻ xấu?
Quyền của bạn với chuyến tàu tư tưởng, hãy cho tôi biết nếu bạn có bất kỳ câu hỏi hoặc câu hỏi nào khác liên quan đến câu trả lời của tôi. –
Nếu dịch vụ của bạn có các chức năng làm nhiều việc hơn là chỉ truy cập cơ sở dữ liệu, đó là những gì bạn nên kiểm tra. Một hoạt động CRUD đơn giản chỉ có ý nghĩa để kiểm tra ở lớp Tích hợp DB. Nếu phương thức dịch vụ 'findById' của bạn đang gọi phương thức' findById' cơ sở dữ liệu, sau đó tăng cường kết quả với một số thông tin không có trong cùng một DB/Bảng/Kho lưu trữ - ví dụ cho bản ghi người dùng có thể bao gồm tìm kiếm tra cứu ngược IP - sau đó điều đó có ý nghĩa để kiểm tra ở cấp dịch vụ. Nhưng chế nhạo * mọi thứ * chỉ đơn giản là kiểm tra thử nghiệm của bạn và khuôn khổ giả. –