如何在Java测试文件中使用ScalaTest?
可以在Java测试文件中使用ScalaTest,如果可以,我在哪里可以找到示例 当我尝试类似于:如何在Java测试文件中使用ScalaTest?,java,scala,scalatest,Java,Scala,Scalatest,可以在Java测试文件中使用ScalaTest,如果可以,我在哪里可以找到示例 当我尝试类似于: //MyUTest.java 导入org.scalatest.flatspec.AnyFlatSpec; 导入org.scalatest.matchers.should.matchers; 公共类MyUTest扩展了AnyFlatSpec、Matchers{ ... } 我得到一个错误,Matchers中的equal(Object)与Matchers.dsl.MatherWordsTL中的相同方法
//MyUTest.java
导入org.scalatest.flatspec.AnyFlatSpec;
导入org.scalatest.matchers.should.matchers;
公共类MyUTest扩展了AnyFlatSpec、Matchers{
...
}
我得到一个错误,
Matchers
中的equal(Object)
与Matchers.dsl.MatherWords
TL中的相同方法冲突;医生:你不能做你想做的事
如下列文件所述:
从Java的角度来看,Trait.scala被编译成Trait接口。因此,在Java中实现Trait被解释为实现一个接口——这使错误消息变得明显。简短回答:您不能利用Java中的trait实现,因为这将在Java中启用多重继承(!)
这是一种特质。但是,要解决此问题,您只需删除匹配器
扩展,并使用测试类:
导入org.scalatest.flatspec.AnyFlatSpec;
公共类MyUTest扩展了AnyFlatSpec{
}
它将被编译。话虽如此,在Java中实际使用ScalaTest功能将非常困难。例如,一个简单的测试类将是:
public class MyUTest extends AnyFlatSpec {
it should "test1" in { println("test1") }
}
上面的单词should
声明为,也就是trait
。所以你不能真正使用它。因此,我不确定如何克服这个问题,因为这是一个非常基本的例子
经过以上分析,我认为在Java中使用ScalaTest将非常困难。你能轻松做到的是,反过来。如果您已经支持Scala,并且有ScalaTest,那么您可以在Scala中测试java代码。它的“组织性”稍差一些,正如您希望看到java文件夹下的java测试类一样,我们刚刚证明这是不可能的。我认为在这样的结构中,拥有这种“混乱”是最好的解决方案。我完全同意@Tomer Shetah的观点。我想补充一点,您可以在scala上创建java包装器:
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}"
}
之后,您可以通过此包装器扩展所有java测试类:
public class SomeOperationTestJava extends JavaScalaTestWrapper {
@Test
void someOperation() {
SomeOperation so = new SomeOperation();
println("=== test ===");
assert(("test").equals(so.someOperation()));
shouldEqual(3);
}
}
您可以将所有scala样式的代码放入包装器,然后使用原始java代码中的这些方法,如其他解决方法。@TomerShetah:java 11,Scalatest 3.2.2。我可以使用Java 8,如果有帮助的话,还可以使用不同版本的ScalaTest。正如我在回答中所解释的,您必须在这个包装器中覆盖
Matchers
/AnyFunSpec
中您想要使用的所有方法。我绝对不会走这条路。顺便问一下,@Test
是什么?sbt-test
会运行这样的测试吗?不会,我的主要想法是将代码包装成{println(“test1”)}
中的“test1”到带有参数的java方法中,并从子类调用。我没想到sbt
工具将成为建筑项目的唯一可能。我与maven
或gradle
一起工作,他们可以编译scala
类,这要感谢插件@Test
是用于定义测试插件将触发的方法的注释。