gpt4 book ai didi

Android - 如何使用 mockito 对 Logging 类进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-03 12:30:36 27 4
gpt4 key购买 nike

我编写了一个类来管理 Android 应用程序项目中的日志记录。LogManager 基本上是 android.util.log 的包装器如果应用程序崩溃,它会处理记录到文件中,以及标准调试日志记录。我想使用 JUnit 对类进行单元测试。

我尝试了以下方法,但在阅读示例后似乎没有产生我期望的结果:

LogManager.class(这是我使用过的类的简化版本,用于演示目的)

public class LogManager implements ILogManager
{
public void log(String tag, String message)
{
Log.e(tag, message);
}
}

这是我的测试课

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21)
@PrepareForTest({Log.class, LogManager.class})
public class LogManagerUnitTest
{

@Test
public void testLogConsoleInfo()
{
PowerMockito.mockStatic(Log.class);

LogManager.getInstance().log(LogLevel.INFO, "test", "test");

PowerMockito.verifyStatic(Mockito.times(1));
Log.e(anyString(), anyString());
}
}

我的问题是,无论我输入什么,它都会通过。例如:如果我改为用 Log.wtf(...) 替换最后一次调用,它仍然会通过。我会假设它应该失败,因为在静态类 Log 中没有调用 Log.wtf?所以我的问题是,为什么这种方法没有按预期工作?正确的方法是什么?

最佳答案

我开始了一个新的项目,并且能够让它通过测试失败并使用以下适本地成功,所以我假设 runwith 是罪魁祸首:

@RunWith(PowerMockRunner.class)
@PrepareForTest(android.util.Log.class)
public class LoggerUnitTest {
@Test
public void testLog() throws Exception
{
PowerMockito.mockStatic(Log.class); // when(Log.e(anyString(), anyString())).thenReturn(1);

Logger.log("test", "test");

PowerMockito.verifyStatic(times(1));
Log.e(anyString(), anyString());
} }

关于Android - 如何使用 mockito 对 Logging 类进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35217464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com