我有一个用一堆方法Component
调用的类:AppUtil
public
static
@Component
public class AppUtil {
// Methods, fields...
public static List<String> getActiveProfiles() {
return newArrayList(appUtil.env.getActiveProfiles());
}
public static String readResourceFileAsString(String fileName) throws IOException {
return IOUtils.toString(new FileReader(fileName));
}
// More methods....
}
上面写的两个static
方法是由loadUserByUsername
一个类的调用方法调用的GearApiUserDetailsService
。为了测试GearApiUserDetailsService.loadUserByUsername
,我想模拟对这些static
方法的调用AppUtil
。这就是我的单元测试类现在的样子:
@RunWith(MockitoJUnitRunner.class)
public class GearApiUserDetailsServiceTest {
@InjectMocks
private GearApiUserDetailsService gearApiUserDetailsService;
@Before
public void setUp(){
MockitoAnnotations.openMocks(this);
}
@Test
public void testLoadUserByUsernameWithoutActiveProfiles(){
try (MockedStatic<AppUtil> mockedStatic = Mockito.mockStatic(AppUtil.class)) {
mockedStatic.when(AppUtil::getActiveProfiles).thenReturn(Collections.emptyList());
mockedStatic.when(AppUtil::readResourceFileAsString).thenReturn("random string");
final String apiKey = "someExampleAPIKey";
UserDetails userDetails = gearApiUserDetailsService.loadUserByUsername(apiKey);
assertEquals(apiKey, userDetails.getUsername());
}
}
}
问题是,虽然模拟getActiveProfiles
效果很好(经过测试),但模拟在编译readResourceFileAsString
时甚至会失败,IntelliJ 报告它无法解决它:
这两个方法都是public
and static
,唯一的区别是第二个方法带有一个参数。
这篇 2020 年的帖子似乎建议确保该pom
文件包含mockito-core
at version的依赖项3.5.13
。我已经包含了这个依赖项,缓存无效/重新启动,尝试重新运行整个 maven 构建生命周期,但显然由于上述错误,它在编译时仍然失败。想法?(=