【问题标题】:Android - How to UnitTest a Logging class with mockitoAndroid - 如何使用 mockito 对 Logging 类进行单元测试
【发布时间】:2016-02-05 06:16:27
【问题描述】:

我已经编写了一个类来管理 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? 所以我的问题是,为什么这种方法没有按预期工作,正确的方法是什么?

【问题讨论】:

    标签: android junit mockito powermock


    【解决方案1】:

    我开始了一个新项目,并且能够通过以下方式使其未能通过测试并获得适当的成功,所以我假设 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());
        } }
    

    【讨论】:

    • 我收到一个错误:java.lang.NoClassDefFoundError: org/mockito/cglib/proxy/Enhancer
    【解决方案2】:

    对于 RobolectricGradleTestRunner,以下咒语会暴露您的日志记录: ShadowLog.stream = System.out Robolectric 默认不打印 Android 系统日志。

    还值得注意的是,RobolectricGradleTestRunner 已被弃用,取而代之的是 fully operational RobolectricTestRunner(上述分配仍然有效)

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2017-11-22
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      • 2016-03-15
      相关资源
      最近更新 更多