簡體   English   中英

Mockito測試-注入自動接線服務

[英]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/中的步驟解決了我的問題,以更改ServiceAServiceB但沒有@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM