我正在尝试对Sprint启动服务(服务A)进行单位,该启动服务(服务A)已将另一个服务(服务b)自动为
@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);
测试工作正常,然后我从
中切换用户声明serviceanew
user = new ServiceB(userRepository).doUpsertUser(user);
到@Autowired
user = SeviceB.doUpsertUser(user);
我不确定我是否弄乱了创建模拟并以适当的方式注入模拟,因为我在servicea升入Servicea时没有声明ServiceB。
我已经解决了我的问题以下步骤,从https://tedvinke.wordpress.com/2014/02/13/mockito-why-why-why-why-you-should-not-should-not-should-not-should-not-iase-injectmocks-angectmocks-annotation-to-autowire-field/用于更改ServiceA
和ServiceB
,但没有@InjectMocks
我的调整后的摩根托测试看起来像:
@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
....