Spring Mockito 单元测试失败,测试用例中有两个@Qualifier 模拟

问题描述 投票:0回答:1

我有服务类 ClassA 和 ClassB,它们都使用通用参数实现相同的接口。

@Service
@Qualifier(value = "CountryService")
public class CountryService implements SupportCoreService<Country> {}

@Service
@Qualifier(value = "UniversityService")
public class UniversityService implements SupportCoreService<University> {}

我已经实现了它们的常用方法,它们被注入了@Qualifier注释并且没有任何问题。然而,Mockito 似乎不尊重这个注释,并且实际上忽略了其中一个模拟并尝试两次调用相同的方法,从而导致我的测试失败。

这是我的测试设置:

@ExtendWith(MockitoExtension.class)
class StudentApplicationServiceTest {
  @Mock
  @Qualifier("CountryService")
  SupportCoreService<Country> countrySupportCoreService;

  @Mock
  @Qualifier("UniversityService")
  SupportCoreService<University> universitySupportCoreService;

  @InjectMocks
  StudentApplicationService underTest;
}

没有任何类型的编译错误,当我运行测试时,错误消息显示“想要但未调用:”,因为另一个方法被调用两次。

我浏览了几十个SO主题和其他谷歌搜索结果,重构了十几次设置,但似乎没有任何帮助。有什么帮助让我走上正轨吗?

spring unit-testing testing mockito inject
1个回答
0
投票

好吧,我似乎找到了解决办法。

  @BeforeEach
  void setUp() {
    countrySupportCoreService = (SupportCoreService<Country>) mock(SupportCoreService.class);
    universitySupportCoreService = (SupportCoreService<University>) mock(SupportCoreService.class);
  }

手动投射服务似乎可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.