Tôi đang thử nghiệm đơn vị xây dựng trong một ứng dụng Java khởi động Spring cho một lớp dịch vụ.Kiểm tra đơn vị với jUnit và Mockito cho các cuộc gọi API REST bên ngoài
Lớp dịch vụ thực hiện cuộc gọi bên ngoài đến dịch vụ REST API trả về phản hồi JSON. Tôi đang chế nhạo cuộc gọi này bằng Mockito. Tôi hardcoding một JSON trong phản ứng mockserver.
Thực tiễn không tốt này có JSON được mã hóa cứng trong các thử nghiệm đơn vị của bạn không? Nếu cấu trúc JSON thay đổi, thì thử nghiệm sẽ thất bại là lý do của tôi. Có cách nào tốt hơn, tốt nhất để làm điều này không?
Ví dụ Snippet dưới đây:
Mã thực tế là chức năng, tôi vừa mới chỉnh sửa đoạn này nó cho ngắn gọn để có được những ý tưởng trên, vì vậy viết bình luận nếu bạn thấy bất kỳ lỗi:
public class UserServiceTest extends TestCase {
private static final String MOCK_URL = "baseUrl";
private static final String DEFAULT_USER_ID = "353";
UserService classUnderTest;
ResponseEntity<Customer> mockResponseEntity;
MockRestServiceServer mockServer;
@Mock
RestTemplate mockRestTemplate;
public void setUp() throws Exception {
super.setUp();
classUnderTest = new UserRestService();
mockRestTemplate = new RestTemplate();
mockServer = MockRestServiceServer.createServer(mockRestTemplate);
ReflectionTestUtils.setField(classUnderTest, "restTemplate",
mockRestTemplate);
ReflectionTestUtils.setField(classUnderTest, "userSvcUrl",
MOCK_URL);
}
public void testGetUserById() throws Exception {
mockServer.expect(requestTo(MOCK_URL + "/Users/" + DEFAULT_USER_ID)).andExpect(method(HttpMethod.GET))
.andRespond(withSuccess(
"{\n" +
" \"UserCredentials\": {\n" +
" \"Password\": \"\",\n" +
" \"PasswordNeedsUpdate\": false,\n" +
" \"Security\": [\n" +
" {\n" +
" \"Answer\": \"\",\n" +
" \"Question\": \"Why did the bicycle fall over?\"\n" +
" }\n" +
" ]\n" +
"}"
, MediaType.APPLICATION_JSON));
Customer customer = classUnderTest.getUserById(DEFAULT_USER_ID);
mockServer.verify();
assertNotNull(customer);
assertEquals(DEFAULT_USER_ID, customer.getId());
}
}
JUnit cho tôi biết phương pháp thiết lập phải tĩnh. Phương thức withSuccess() được định nghĩa ở đâu? – chrisinmtown