如何在 Java 测试文件中使用 ScalaTest?

Sha*_*mal 4 java scala scalatest

可以在 Java 测试文件中使用 ScalaTest,如果可以,我在哪里可以找到示例?

当我尝试类似的事情时:

// MyUTest.java

import org.scalatest.flatspec.AnyFlatSpec;
import org.scalatest.matchers.should.Matchers;

public class MyUTest extends AnyFlatSpec, Matchers {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,equal(Object)Matchers与同一方法的冲突matchers.dsl.MatherWords

Tom*_*tah 5

TL;DR:你不能做你正在尝试的事情。

在 Java使用具有已实现方法的 Scala 特征所述:

从 Java 的角度来说,Trait.scala 被编译成 Trait 接口。因此,在 Java 中实现 Trait 被解释为实现一个接口 - 这使您的错误消息显而易见。简短回答:您不能利用 Java 中的 trait 实现,因为这将启用 Java 中的多重继承(!)

并且Matchers是一个特质。但是,要克服这个问题,您可以删除Matchers扩展名,并使用测试类:

import org.scalatest.flatspec.AnyFlatSpec;

public class MyUTest extends AnyFlatSpec {
    
}
Run Code Online (Sandbox Code Playgroud)

哪个会编译。话虽如此,在 Java 中实际使用 ScalaTest 功能真的很困难。例如,一个简单的测试类将是:

public class MyUTest extends AnyFlatSpec {
    it should "test1" in { println("test1") }
}
Run Code Online (Sandbox Code Playgroud)

should上面的词在AnyFlatSpecLike声明,也是trait如此。所以你不能真正使用它。所以我不确定如何克服这个问题,因为这是您可以在ScalaTest 快速入门中找到的非常基本的示例。

经过上面的分析,我认为在Java中使用ScalaTest会非常困难。你可以很容易地做的事情是相反的。如果你已经支持 Scala,并且你有 ScalaTest,你可以在 Scala 中测试 java 代码。它不太“有组织”,因为您希望在 java 文件夹下看到 java 测试类,我们只是证明这是不可能的。我认为拥有这种“混乱”是这种结构中的最佳解决方案。