Qum*_*bas 12 android mockito mockito-kotlin
尝试模拟静态方法时出现以下异常。
对于SettingsUtility,当前线程中已经注册了静态mock,要创建新的mock,必须注销已有的静态mock注册
@Before
fun setUp() {
mockStatic(SettingsUtility::class.java) {
`when` { SettingsUtility.method(app) }.thenReturn { "" }}
}
Run Code Online (Sandbox Code Playgroud)
Sud*_*ppa 20
必须在完成测试后调用返回对象的 MockedStatic.close() 方法,否则模拟将在当前线程上保持活动状态。
我不确定它是否与在 Java 中的完成方式相同。希望这个 Java 代码片段有帮助
private static MockedStatic<SettingsUtility> mockedSettings;
@BeforeAll
public static void init() {
mockedSettings = mockStatic(mockedSettings.class);
}
@AfterAll
public static void close() {
mockedSettings.close();
}
Run Code Online (Sandbox Code Playgroud)
a f*_*yer 18
以@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();
}
Run Code Online (Sandbox Code Playgroud)
San*_*ani 11
Mockito Inline 的工作原理与 Mockito 不同,因此失败了。因此需要做的是显式初始化和关闭模拟。
您需要为您的班级初始化mockedStatic
private MockedStatic<YourClassWithStaticMethod> mockedStatic;
Run Code Online (Sandbox Code Playgroud)
然后在BeforeEach和AfterEach中添加以下代码
@BeforeEach
public void init() {
mockedStatic = mockStatic(YourClassWithStaticMethod.class);
}
@AfterEach
public void cleanup() {
mockedStatic.close();
}
Run Code Online (Sandbox Code Playgroud)
现在您可以设定模拟的期望。
mockedStatic.when(YourClassWithStaticMethod::staticMethodToMock).thenReturn(yourReturnedMockedObject);
Run Code Online (Sandbox Code Playgroud)
尝试这样做,您将不会收到此错误。它对我有用。
try(MockedStatic mocked = mockStatic(SettingsUtility.class)) {
mocked.when(SettingsUtility::method).thenReturn("whatever you want");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9468 次 |
| 最近记录: |