Java Mockito测试-注入到自动连线服务

Java 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

我正在尝试对Sprint引导服务A进行单元测试,它自动连接了另一个服务B

@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;}