【问题标题】:Mixing scala, maven and java within Eclipse - unit testing在 Eclipse 中混合 scala、maven 和 java - 单元测试
【发布时间】:2012-11-02 23:52:02
【问题描述】:

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

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

【问题讨论】:

    标签: java eclipse scala maven scalatest


    【解决方案1】:

    如果您只想从 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中也应该可以。

    【讨论】:

      【解决方案2】:

      maven-scala-plugin 可以联合编译 Scala 和 Java 代码。从 Scala 2.7 开始,Scala 一般可以进行联合编译。

      【讨论】:

      • 这是否意味着我需要转换我的 Eclipse java 项目?请参阅问题编辑。
      • 如果你只是使用没有maven的Scala编译器,那么join编译应该可以在eclipse中工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 2011-05-25
      • 1970-01-01
      • 2010-11-08
      • 2023-03-19
      • 2020-02-21
      • 2020-04-13
      相关资源
      最近更新 更多