在IntelliJ Idea中查看ScalaTest的控制台输出

5
我对如何使IDEA将测试输出到控制台感到非常沮丧。我尝试了不同版本的Scala、ScalaTest和IDEA,但都没有帮助。目前我的设置是:scala-2.10.0-snapshot、scalatest_2.9.1-1.6.1、idea 110.3。该项目由Maven管理。请问有谁能帮忙吗?我期望看到像这样的内容:http://www.scalatest.org/getting_started_with_feature_spec

我不了解Maven,但是ScalaTest与SBT配合使用很好,在IDEA中将输出到SBT控制台窗口(使用SBT插件)。您是否正在使用Maven插件? - Luigi Plinge
谢谢。自从11版本以来,Idea对FSC提供了不错的支持,我停止使用SBT,因为它在工作流程中引入了几个额外的步骤,而且我并不认为它的管理方法比Maven更容易。现在我只使用Maven,并像往常一样运行测试Idea运行配置。可能这个问题是Idea测试运行器适配器的一个bug。稍后我会在他们的跟踪器上发布它。 - Nikita Volkov
println() 在这里可以使用,与 IDEA 10.5.2 兼容。什么是 idea 110.3??scala-10.0-snapshot 是什么鬼?是指 scala-2.10.0-snapshot 吗? - Blaisorblade
Idea 110.3是一个EAP版本(请参见http://confluence.jetbrains.net/display/IDEADEV/IDEA+11+EAP),关于Scala版本-你是对的,感谢指出。 - Nikita Volkov
2个回答

3

1

我刚刚经历了整个“被IDEA惩罚”的过程,现在我有一个解决方案给你...

Logbackslf4s添加到你的POM中:

<dependency>
    <groupId>com.weiglewilczek.slf4s</groupId>
    <artifactId>slf4s_${scala.version}</artifactId>
    <version>1.0.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>0.9.30</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>0.9.30</version>
</dependency>

注意事项:
我在slf4s artifactId中使用了${scala.version} - 确保您已定义此内容,或者将其替换为2.9.1或类似内容。
另外 - 您还需要可用于依赖项的scala-tools存储库 - 我假设您已经拥有它以进行编译。

然后,在资源文件夹中添加一个名为logback.xml的文件,其中包含以下内容:

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date,%d{HH:mm:ss.SSS},%thread,%-5level,%logger{36},%line,%msg%n</pattern>
        </encoder>
    </appender>

    <root level="TRACE">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

我的模式可能有点奇怪——它实际上是来自一个文件 appender,它将其作为 CSV 输出,我可以轻松地在 Excel 中打开并绘制图形。

然后在您的应用程序中扩展 Logging trait,就像这样:

import swing._
import com.weiglewilczek.slf4s.Logging

object App extends SwingApplication with Logging {

    override def startup(args: Array[String]) {

        logger.info("Starting init...")
    }
}

并且信息消息“Starting init…”以及其他一些内容应该出现在控制台窗口中。

Logback和slf4s是我链接到的主题。

重要而棒极了:

我记不得它叫什么名字了,但你用来发布消息的日志记录方法都有像info(message: => String)这样的签名 - 就像你在logger.scala中看到的那样。

这意味着你传递给它们的表达式或块将不会在配置文件中未启用相关日志记录级别时执行任何操作。

因此,当它被关闭时,它只会向代码添加一个方法调用和一个标志检查 - 在我看来非常棒 :)

希望这有所帮助, Seth。


我尝试了你的建议,但没有任何变化。你可能还有什么其他遗漏的事情吗?而且我不太明白它与SwingApplication有任何关系。 - Nikita Volkov
我在测试中也使用了相同的技巧 - 它也为我解决了问题。 - Seth
嗯,之前这个问题对我来说不起作用,我以为通过日志修复了它,但现在System.out也可以工作了。 我能想到的唯一变化是将我的IDEA项目从源代码控制目录移动到完全外部的位置-除了字体和代码样式等之外,我没有更改任何IDEA设置。 对不起,那没用 - 请尝试禁用断点等 - 特别是“任何异常”断点一直给我带来很多麻烦。 - Seth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接