[英]Mockito test - inject to autowired service
我正在嘗試對已經自動連接另一個服務(服務B)的Sprint Boot服務(服務A)進行單元測試。
@Autowired
ServiceB serviceB;
單元測試的聲明如下:
@Mock
private UserRepository userRepository;
@Mock
private ServiceA serviceA;
@InjectMocks
@Autowired
private ServiceB serviceB;
private User user;
這將失敗
Mockito.when(userRepository.save(any(User.class))).thenReturn(user);
User result = serviceA.upsertUser(user);
其中serviceA upsertUser()
方法看起來像
user = serviceB.doUpsertUser(user);
測試工作正常之前,我已經在ServiceA交換new
聲明從用戶的
user = new ServiceB(userRepository).doUpsertUser(user);
到@Autowired
user = SeviceB.doUpsertUser(user);
我不確定在進入ServiceA時未聲明ServiceB時是否以正確的方式創建了模擬並注入了模擬。
我已按照https://tedvinke.wordpress.com/2014/02/13/mockito-why-you-should-not-use-injectmocks-annotation-to-autowire-fields/中的步驟解決了我的問題,以更改ServiceA
和ServiceB
但沒有@InjectMocks
就無法@InjectMocks
我調整后的Mockito測試看起來像:
@Mock
private UserRepository userRepository;
@InjectMocks
private ServiceB serviceB;
private User user;
private ServiceA serviceA;
@Before
public void setUp() {
this.serviceA = new ServiceA(userRepository, serviceB);
}
@Test
....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.