如何在java测试文件中使用scalatest?

bxpogfeg  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(285)

可以在java测试文件中使用scalatest,如果可以的话,在哪里可以找到示例?
当我尝试以下方法时:

// MyUTest.java

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

public class MyUTest extends AnyFlatSpec, Matchers {
  ...
}

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

igsr9ssn

igsr9ssn1#

热释光;医生:你不能做你想做的事。
正如在java中使用scala traits实现方法中所述:
从java的Angular 来看,trait.scala被编译成trait接口。因此,在java中实现trait被解释为实现一个接口——这使错误消息变得明显。简而言之:您不能利用java中的trait实现,因为这将在java中启用多重继承(!)
以及 Matchers 是一种特质。但是,要解决这个问题,您只需删除 Matchers 扩展,并具有测试类:

import org.scalatest.flatspec.AnyFlatSpec;

public class MyUTest extends AnyFlatSpec {

}

它将编译。尽管如此,在java中实际使用scalatest功能将非常困难。例如,一个简单的测试类是:

public class MyUTest extends AnyFlatSpec {
    it should "test1" in { println("test1") }
}

这个词 should 在anyflatspecklike上声明 trait 也。所以你不能真正使用它。所以我不确定如何克服这个问题,因为这是一个非常基本的例子,你可以在scalatest快速入门中找到。
经过以上分析,我认为在java中使用scalatest将非常困难。你能轻易做到的,恰恰相反。如果您已经支持scala,并且有scalatest,那么您可以在scala中测试java代码。它没有那么“条理化”,因为您希望看到java文件夹下的java测试类,我们刚刚证明了这是不可能的。我认为在这样的结构中,有这样的“混乱”是最好的解决办法。

dldeef67

dldeef672#

我完全同意@tomer shetah。我想补充一点,您可以在scala上为java创建 Package 器:

class JavaScalaTestWrapper extends AnyFunSpec with Matchers {
  def println(x : scala.Any) = Predef.println(x)
  def shouldEqual(x : scala.Int, ) = SomeCode.someFunc(x) shouldBe s"${x}"
}

之后,您可以通过这个 Package 器扩展所有java测试类:

public class SomeOperationTestJava extends JavaScalaTestWrapper {
    @Test
    void someOperation() {
        SomeOperation so = new SomeOperation();
        println("=== test ===");
        assert(("test").equals(so.someOperation()));
        shouldEqual(3);
    }
}

所有scala样式的代码都可以放入 Package 器中,然后使用原始java代码中的这些方法,比如其他解决方法。

相关问题