尝试模拟静态方法时出现以下异常。
对于 SettingsUtility,静态模拟已经注册在当前线程中要创建一个新的模拟,必须取消现有的静态模拟注册
@Before
fun setUp() {
mockStatic(SettingsUtility::class.java) {
`when` { SettingsUtility.method(app) }.thenReturn { "" }}
}
尝试模拟静态方法时出现以下异常。
对于 SettingsUtility,静态模拟已经注册在当前线程中要创建一个新的模拟,必须取消现有的静态模拟注册
@Before
fun setUp() {
mockStatic(SettingsUtility::class.java) {
`when` { SettingsUtility.method(app) }.thenReturn { "" }}
}
返回对象的 MockedStatic.close() 方法必须在完成测试时调用,否则模拟将在当前线程上保持活动状态。
我不确定它是否与它在 Java 中的完成方式相同。希望这个 Java 代码片段有帮助
private static MockedStatic<SettingsUtility> mockedSettings;
@BeforeAll
public static void init() {
mockedSettings = mockStatic(SettingsUtility.class);
}
@AfterAll
public static void close() {
mockedSettings.close();
}
尝试这样做,您将不会收到此错误。它对我有用。
try(MockedStatic mocked = mockStatic(SettingsUtility.class)) {
mocked.when(SettingsUtility::method).thenReturn("whatever you want");
}
以@Sudha 的回答为基础。在 Java 中,您可以使用 @BeforeClass 和 @AfterClass
private static MockedStatic<SettingsUtility> mockedSettings;
@BeforeClass
public static void init() {
mockedSettings = mockStatic(mockedSettings.class);
}
@AfterClass
public static void close() {
mockedSettings.close();
}