java - 在 Eclipse 中混合 scala、maven 和 java - 单元测试

标签 java eclipse scala maven scalatest

我有一个 java maven 项目,我想用 scala 进行单元测试。但是我怎么能在一个 Eclipse 项目中混合 java 和 scala 代码,因为 java 和 scala 使用它们自己的编译器。由于这个 scala 代码不会在 Eclipse 中编译,因为 java 编译器需要 java 语法。

目前我的项目是基于 Eclipse 的,它们是基于 java 的项目。它们是否需要转换为不同的项目类型,例如 Scala?

最佳答案

如果您只想从 Scala 测试 Java 代码,那么设置这样一个 Maven 项目非常容易。由于我不是 eclipse 用户,所以我不确定它如何与 eclipse 一起使用。我已经使用 IntelliJ 进行了测试,它运行良好。 eclipse 也不应该有任何问题。

我创建了一个简单的 pom.xml,它只使用 scala 编译器进行测试,并使用普通的 java 编译器来编写主要的 java 代码。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stackoverflow.Q13379591</groupId>
    <artifactId>Q13379591</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <scala.version>2.9.2</scala.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <dependency>
            <groupId>org.scalatest</groupId>
            <artifactId>scalatest_${scala.version}</artifactId>
            <version>2.0.M4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.scala-tools</groupId>
                <artifactId>maven-scala-plugin</artifactId>
                <version>2.15.2</version>
                <executions>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <args>
                        <arg>-g:vars</arg>
                        <arg>-make:transitive</arg>
                        <arg>-dependencyfile</arg>
                        <arg>${project.build.directory}/.scala_dependencies</arg>
                    </args>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.scalatest</groupId>
                <artifactId>scalatest-maven-plugin</artifactId>
                <version>1.0-M2</version>
                <configuration>
                    <reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
                    <junitxml>.</junitxml>
                    <filereports>WDF TestSuite.txt</filereports>
                    <stdout>W</stdout> <!-- Skip coloring output -->
                </configuration>
                <executions>
                    <execution>
                        <id>scala-test</id>
                        <goals>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

现在这是我要测试的一个简单的 Java 类:

src/main/java/com/stackoverflow/Hello.java

package com.stackoverflow;

/**
 * @author maba, 2012-11-14
 */
public interface Hello {
    String hello();
}

src/main/java/com/stackoverflow/HelloJava.java

package com.stackoverflow;

/**
 * @author maba, 2012-11-14
 */
public class HelloJava implements Hello {

    public String hello() {
        return "Hello Java";
    }
}

最后是 ScalaTest 测试类。

src/test/scala/com/stackoverflow/HelloJavaTest.scala

package com.stackoverflow

import org.scalatest.FlatSpec

/**
 * @author maba, 2012-11-14
 */
class HelloJavaTest extends FlatSpec {
  "HelloJava" should "be instance of Hello" in {
    val hello = new HelloJava
    val result = hello match {
      case f:Hello => true
    }
    assert(result)
  }

  it should "say Hello Java" in {
    val helloJava = new HelloJava
    assert(helloJava.hello === "Hello Java")
  }
}

您现在可以使用此命令运行它:

mvn test

我可以在 IntelliJ 中右键单击测试用例并运行测试。在 eclipse 中应该也可以。

关于java - 在 Eclipse 中混合 scala、maven 和 java - 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13379591/

相关文章:

java - 为什么让 `This page isn' t 工作... ERR_TOO_MANY_REDIRECTS`?

Java 1.5 Calendar#compareTo() 混淆

java - Android Java IllegalStateException : Could not execute method of the activity

javascript - Nodeclipse的CPU利用率很高

scala - 通过将类型参数与参数的路径相关类型进行匹配来约束操作

java - Python 脚本不会在本地主机 gae 开发服务器的 urlopen 之后读取()——对等连接重置

java - 如何在 Eclipse 中运行一个简单的 Java 程序?

java - SonarLint 和 IBM JVM 的 HTTPS 问题

Scala Slick Lazy Fetch

scala - IntelliJ : Command Line is too Long. 在 SBT 项目中缩短...的命令行