PRO*_*ock 14
我知道这两个选项:
@Autowired
@InjectMocks
private ProductController productController;
@SpyBean
private ProductService productServiceSpy;
Run Code Online (Sandbox Code Playgroud)
@Autowired
private ProductController productController;
@Autowired
private ProductService productService;
@Before
public void setUp() {
ProductService productServiceSpy = Mockito.spy(productService);
ReflectionTestUtils.setField(productController, "productService", productServiceSpy);
}
Run Code Online (Sandbox Code Playgroud)
yur*_*s87 14
我自己也很惊讶,但它确实对我们有用。我们有很多地方,例如:
@Spy
@Autowired
private FeatureService featureService;
Run Code Online (Sandbox Code Playgroud)
我想我知道你为什么面临这个问题。这不是关于注入,而是关于when(bloMock.doSomeStuff()).thenReturn(1)vs doReturn(1).when(bloMock).doSomeStuff()。见:http : //www.stevenschwenke.de/spyingWithMockito
非常重要的区别在于,第一个选项实际上会调用 doSomeStuff()- 方法,而第二个选项则不会。两者都会导致 doSomeStuff() 返回所需的 1。
小智 6
@Spy与 一起使用@Autowired会起作用,直到您想要验证该间谍与该间谍注入的不同组件之间的交互。我发现对我有用的是在https://dzone.com/articles/how-to-mock-spring-bean-version-2找到的以下方法
@Configuration
public class AddressServiceTestConfiguration {
@Bean
@Primary
public AddressService addressServiceSpy(AddressService addressService) {
return Mockito.spy(addressService);
}
}
Run Code Online (Sandbox Code Playgroud)
这会将您的自动装配组件变成间谍对象,该对象将由您的服务使用并可以在您的测试中进行验证。
我有一个类似的问题,我们一起使用 @SpyBean 和 @Autowired 修复了:
@SpyBean
@Autowired
ClosedInvoiceEventHandler closedInvoiceEventHandler;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8265 次 |
| 最近记录: |