Java Mockito测试-注入到自动连线服务
我正在尝试对Sprint引导服务A进行单元测试,它自动连接了另一个服务BJava Mockito测试-注入到自动连线服务,java,spring,unit-testing,spring-boot,mockito,Java,Spring,Unit Testing,Spring Boot,Mockito,我正在尝试对Sprint引导服务A进行单元测试,它自动连接了另一个服务B @Autowired ServiceB serviceB; 单元测试的声明如下所示: @Mock private UserRepository userRepository; @Mock private ServiceA serviceA; @InjectMocks @Autowired private ServiceB serviceB; private User user; @Mock private Use
@Autowired
ServiceB serviceB;
单元测试的声明如下所示:
@Mock
private UserRepository userRepository;
@Mock
private ServiceA serviceA;
@InjectMocks
@Autowired
private ServiceB serviceB;
private User user;
@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
....
而这将在未来失败
Mockito.when(userRepository.save(any(User.class))).thenReturn(user);
User result = serviceA.upsertUser(user);
其中ServiceUpsertUser方法看起来像
user = serviceB.doUpsertUser(user);
在我从一个新的用户声明中切换到服务之前,测试工作正常
user = new ServiceB(userRepository).doUpsertUser(user);
自动连线
我不确定我是否在创建模拟和以正确的方式注入模拟时遇到了麻烦,因为当我进入ServiceA时,ServiceB没有被声明。我已经按照对ServiceA和ServiceB进行更改的步骤解决了我的问题,但如果没有@InjectMocks,就没有办法离开 我的调整后Mockito测试如下所示:
@Mock
private UserRepository userRepository;
@Mock
private ServiceA serviceA;
@InjectMocks
@Autowired
private ServiceB serviceB;
private User user;
@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
....
您是否在测试类中使用SpringJUnit4ClassRunner.class?有必要使自动连线工作吗?@KamilW Only@RunWithMockitoJUnitRunner.class我将根据您的建议进行检查,将其更改为@RunWithSpringJUnit4ClassRunner.class,并让我知道它是否工作。@KamilW在切换到所有其他Mockito测试停止工作后。现在,让我们通过调用此方法尝试删除@Autowired annotation和init mock@在public void安装程序引发异常之前{MockitoAnnotations.initMocksthis;}