我有服务类 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主题和其他谷歌搜索结果,重构了十几次设置,但似乎没有任何帮助。有什么帮助让我走上正轨吗?
好吧,我似乎找到了解决办法。
@BeforeEach
void setUp() {
countrySupportCoreService = (SupportCoreService<Country>) mock(SupportCoreService.class);
universitySupportCoreService = (SupportCoreService<University>) mock(SupportCoreService.class);
}
手动投射服务似乎可以解决问题。