Tôi theo dõi những gì @hoaz đề xuất. Tuy nhiên, tôi nhận được nullpointer ngoại lệMockito NullPointerException
@RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest {
@InjectMocks private GeneralConfigService generalConfigService;
@Mock private SomeDao someDao;
@Mock private ExternalDependencyClass externalDependencyObject
@Test
public void testAddGeneralConfigCallDAOSuccess() {
when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));
//println works here, I am able to get collection from my mocked DAO
// Calling the actual service function
generalConfigService.process(externalDependencyObject)
}
}
Trong Mã của tôi nó như thế này:
import com.xyz.ExternalDependencyClass;
public class GeneralConfigService{
private SomeDao someDao;
public void process(ExternalDependencyClass externalDependencyObject){
// function using Mockito
Collection<String> result = someDao.findMe(externalDependencyObject.getId.toString())
}
}
Tôi cũng nhận thấy rằng DAO là rỗng vì vậy tôi đã làm điều này (Chỉ cần đề cập đến, tôi đã làm các bước dưới đây để cố gắng, tôi biết sự khác biệt giữa springUnit và Mockito hoặc xyz):
@Autowired
private SomeDao someDao;
giải pháp @ John B giải quyết vấn đề của tôi. Tuy nhiên tôi muốn đề cập đến những gì đã không làm việc cho tôi. Đây là cập nhật đơn vị thử nghiệm của tôi
@Test
public void testAddGeneralConfigCallDAOSuccess() {
/*
This does not work
externalDependencyObject.setId(new ExternalKey("pk_1"));
// verify statement works and I thought that the class in test when call the getId
// it will be able to get the ExternalKey object
//verify(externalDependencyObject.setId(new ExternalKey("pk_1")));
*/
// This works
when(externalDependencyObject.getId()).thenReturn(new ExternalKey("pk_1"));
when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));
....
// Calling the actual service function
generalConfigService.process(externalDependencyObject)
}
Được tham chiếu câu hỏi này trong:
How do I mock external method call with Mockito
How do I set a property on a mocked object using Mockito?
Tại sao bạn chế nhạo thứ gì đó mà bạn đang tự động? Nó * mùi * như thế này nên là một thử nghiệm tích hợp kiểu Spring tinh khiết, hoặc một thử nghiệm mô hình thuần túy. – Makoto
Tôi đã cố gắng thực hiện bước @Autowired vì tôi đã chạy vào ngoại lệ của NullPointer, nhưng nó đang chạy vào ngoại lệ ngay cả sau đó. Tôi thấy rằng khi 'someDao.findMe (someObject.getId.toString())' thực hiện nó KHÔNG kích hoạt câu lệnh trả về MockDao của tôi, mà thay vào đó cố gắng đánh giá 'someObject.getId.toString()'. Khi tôi đã println trong thử nghiệm cho 'someDao.findMe' nó sẽ trả về bộ sưu tập. Tôi cũng đã kiểm tra việc gỡ lỗi, 'someDao' đã được đặt thuộc tính thành generalConfigService. Vì vậy, không chắc chắn lý do tại sao nó đánh giá và không chỉ trả lại bộ sưu tập của tôi – Anuj