2012-11-14 12 views
7

मेरे पास एक जावा मेवेन प्रोजेक्ट है जिसे मैं स्केल के साथ यूनिट परीक्षण करना चाहता हूं। लेकिन मैं एक ग्रहण परियोजना के भीतर जावा और स्कैला कोड कैसे मिला सकता हूं क्योंकि जावा और स्कैला अपने स्वयं के कंपाइलर्स का उपयोग करते हैं। जावा स्केलर जावा सिंटैक्स की अपेक्षा करता है क्योंकि इस स्कैला कोड ग्रहण में संकलित नहीं होगा।ग्रहण के भीतर स्केल, मैवेन और जावा मिलाकर - यूनिट परीक्षण

वर्तमान में मेरी परियोजनाएं ग्रहण पर आधारित हैं और वे जावा आधारित परियोजनाएं हैं। क्या उन्हें एक अलग परियोजना प्रकार में ऐसे स्केल में परिवर्तित करने की आवश्यकता है?

उत्तर

3

यदि आप केवल स्कैला से जावा कोड का परीक्षण करना चाहते हैं तो इस तरह के एक मैवेन प्रोजेक्ट को स्थापित करना काफी आसान है। चूंकि मैं ग्रहणकर्ता नहीं हूं, मुझे यकीन नहीं है कि यह ग्रहण के साथ कैसे काम करता है। मैंने इंटेलिजे के साथ परीक्षण किया है और यह बहुत अच्छी तरह से काम करता है। ग्रहण के साथ कोई समस्या नहीं होनी चाहिए।

मैंने एक साधारण pom.xml बनाया है जो परीक्षण के लिए स्कैला कंपाइलर का उपयोग करता है और मुख्य जावा कोड के लिए सामान्य जावा कंपाइलर का उपयोग करता है।

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> 

अब यहाँ एक सरल जावा वर्ग है कि मैं परीक्षण करना चाहते हैं:

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"; 
    } 
} 

और अंततः स्कैलाटेस्ट टेस्ट क्लास।

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 

मैं सिर्फ सही कर सकते हैं इंटेलीजे में परीक्षण का मामला पर क्लिक करें और परीक्षण चलाते हैं। यह ग्रहण में भी संभव होना चाहिए।

0

मेवेन-स्कैला-प्लगइन स्कैला और जावा कोड के संयुक्त संकलन कर सकता है। स्कैला 2.7 के बाद सामान्य रूप से स्कैला संयुक्त संकलन कर सकता है।

+0

क्या इसका मतलब है कि मुझे अपनी ग्रहण जावा परियोजना को बदलने की ज़रूरत है? कृपया प्रश्न संपादित करें देखें। – user701254

+0

यदि आप मेवेन के बिना स्कैला कंपाइलर का उपयोग करते हैं, तो संकलन में शामिल होना ग्रहण में काम करना चाहिए। –

संबंधित मुद्दे