【问题标题】:How to get Android Logging Output Displayed with JUnit Tests (using native JUnit w/o Emulator)如何使用 JUnit 测试显示 Android 日志记录输出(使用本机 JUnit w/o Emulator)
【发布时间】:2015-11-22 01:52:24
【问题描述】:

我正在使用 JUnit 4 编写 Android 测试用例(这些测试没有使用模拟器,而是作为原生测试运行)。在我的代码中,我使用 SL4J 进行日志记录,但是当我运行单元测试时,我看不到任何日志记录输出。例如如下语句:

  private static final Logger logger = LoggerFactory.getLogger(AClass.class);
  logger.warn("log output not visible in unit test");

关于是否可以在单元测试中访问记录器输出的任何想法?

问候,

【问题讨论】:

  • 嗨 Jared,我的 gradle 文件中已经有了这个,它记录了测试执行的不同阶段,并在测试中遇到异常时转储 stderr。然而不幸的是,它并没有做我需要做的事情,即在我的测试代码中记录我的实际日志语句。
  • 你真的可以只使用System.out.printlnSystem.err.println。使用它们没有任何问题,它们总是在任何 Java 上下文中工作。

标签: android unit-testing junit slf4j


【解决方案1】:

我以前回答过这个问题,但我现在找不到答案的链接。

这里是 Android gradle 插件解决方案:

android {
  // ...

  testOptions.unitTests.all {
    testLogging {
      events 'passed', 'skipped', 'failed', 'standardOut', 'standardError'
    }
  }
}

这是我用于任何 Gradle 测试的解决方案:

tasks.withType(Test) {
    testLogging {
        exceptionFormat 'full'
        showCauses true
        showExceptions true
        showStackTraces true
        showStandardStreams true
    }
}

【讨论】:

  • 这个解决方案是否依赖于 Gradle 版本或其他东西?我尝试了多个 gradle 版本(也是最新的)但没有任何成功。 Std 输出被 gradle 吃掉了,有无“showStandardStreams true”输出是一样的还有其他先决条件吗?
  • 没有。你可以用你的 build.gradle 发布一个问题吗?如果可以,您应该始终使用最新版本的 Gradle。
  • This 建议仅在应用 java 插件时才有效,因此您需要在单独的项目中测试函数。
  • @Habib 好吧,当然。 tasks.withType(Test) { 用于 java 插件。如果您将android DSL 与Android 插件一起使用,则java 插件已包含在内。
  • 我明白了。然后似乎对于android测试我们只能使用“tasks.withType(com.android.build.gradle.internal.tasks.AndroidTestTask)”进行匹配,但它没有testLogging功能,所以它不适用于android测试。我错过了什么吗?
猜你喜欢
  • 2018-03-28
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多