java - मेवेन को चलाने के लिए जुनीट परीक्षण नहीं मिलते हैं




maven junit (11)

अगर किसी ने खोज की है और मैं इसे हल नहीं करता हूं, तो मेरे पास विभिन्न परीक्षणों के लिए लाइब्रेरी थी:

<dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${org.junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>

जब मैंने जूनिट सबकुछ स्थापित किया, तो मुझे उम्मीद है और इसकी मदद करें:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>

मेरे पास एक मेवेन प्रोग्राम है, यह ठीक से संकलित करता है। जब मैं एमवीएन परीक्षण चलाता हूं तो यह कोई परीक्षण नहीं चलाता है (टेस्ट हेडर के तहत कहता है कि There are no tests to run. )।

मैंने इस समस्या को एक सुपर सरल सेटअप के साथ फिर से बनाया है जिसमें मैं नीचे शामिल होने के साथ ही आउटपुट के साथ-साथ आउटपुट भी शामिल करूंगा।

यूनिट परीक्षण ग्रहण से ठीक चलते हैं (दोनों इसके डिफ़ॉल्ट जूनिट पैकेज के साथ और जब मैं इसके बजाय maven द्वारा डाउनलोड junit.jar शामिल करता हूं)। एमवीएन test-compile भी test-compile क्लास के तहत कक्षा को सही ढंग से बनाता है। मैं इसे ओवेक्स 10.6.7 पर मैवेन 3.0.2 और जावा 1.6.0_24 के साथ चला रहा हूं।

निर्देशिका संरचना यहां दी गई है:

/my_program/pom.xml
/my_program/src/main/java/ClassUnderTest.java
/my_program/src/test/java/ClassUnderTestTests.java

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>my_group</groupId>
    <artifactId>my_program</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>My Program</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

ClassUnderTest.java:

public class ClassUnderTest {

    public int functionUnderTest(int n) {
        return n;
    }

}

ClassUnderTestTests.java:

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class ClassUnderTestTests {

    private ClassUnderTest o;

    @Before
    public void setUp() {
        o = new ClassUnderTest();
    }

    @Test
    public void testFunctionUnderTest_testCase1() {
        Assert.assertEquals(1, o.functionUnderTest(1));
    }

    @Test
    public void testFunctionUnderTest_testCase2() {
        Assert.assertEquals(2, o.functionUnderTest(2));
    }
}

एमवीएन-एक्स परीक्षण का अंत:

[DEBUG] Configuring mojo org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-surefire-plugin:2.7.1, parent: [email protected]]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-surefire-plugin:2.7.1:test' with basic configurator -->
[DEBUG]   (s) basedir = /Users/aaron/Programs/my_program
[DEBUG]   (s) childDelegation = false
[DEBUG]   (s) classesDirectory = /Users/aaron/Programs/my_program/target/classes
[DEBUG]   (s) disableXmlReport = false
[DEBUG]   (s) enableAssertions = true
[DEBUG]   (s) forkMode = once
[DEBUG]   (s) junitArtifactName = junit:junit
[DEBUG]   (s) localRepository =        id: local
      url: file:///Users/aaron/.m2/repository/
   layout: none

[DEBUG]   (f) parallelMavenExecution = false
[DEBUG]   (s) pluginArtifactMap = {org.apache.maven.plugins:maven-surefire-plugin=org.apache.maven.plugins:maven-surefire-plugin:maven-plugin:2.7.1:, org.apache.maven.surefire:surefire-booter=org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile, org.apache.maven.surefire:surefire-api=org.apache.maven.surefire:surefire-api:jar:2.7.1:compile, org.apache.maven.surefire:maven-surefire-common=org.apache.maven.surefire:maven-surefire-common:jar:2.7.1:compile, org.apache.maven.shared:maven-common-artifact-filters=org.apache.maven.shared:maven-common-artifact-filters:jar:1.3:compile, org.codehaus.plexus:plexus-utils=org.codehaus.plexus:plexus-utils:jar:2.0.5:compile, junit:junit=junit:junit:jar:3.8.1:compile, org.apache.maven.reporting:maven-reporting-api=org.apache.maven.reporting:maven-reporting-api:jar:2.0.9:compile}
[DEBUG]   (s) printSummary = true
[DEBUG]   (s) project = MavenProject: my_group:my_program:1.0-SNAPSHOT @ /Users/aaron/Programs/my_program/pom.xml
[DEBUG]   (s) projectArtifactMap = {junit:junit=junit:junit:jar:4.8.1:test}
[DEBUG]   (s) redirectTestOutputToFile = false
[DEBUG]   (s) remoteRepositories = [       id: central
      url: http://repo1.maven.org/maven2
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => never]
]
[DEBUG]   (s) reportFormat = brief
[DEBUG]   (s) reportsDirectory = /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG]   (s) session = [email protected]
[DEBUG]   (s) skip = false
[DEBUG]   (s) skipTests = false
[DEBUG]   (s) testClassesDirectory = /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   (s) testFailureIgnore = false
[DEBUG]   (s) testNGArtifactName = org.testng:testng
[DEBUG]   (s) testSourceDirectory = /Users/aaron/Programs/my_program/src/test/java
[DEBUG]   (s) trimStackTrace = true
[DEBUG]   (s) useFile = true
[DEBUG]   (s) useManifestOnlyJar = true
[DEBUG]   (s) workingDirectory = /Users/aaron/Programs/my_program
[DEBUG] -- end configuration --
[INFO] Surefire report directory: /Users/aaron/Programs/my_program/target/surefire-reports
[DEBUG] Setting system property [user.dir]=[/Users/aaron/Programs/my_program]
[DEBUG] Setting system property [localRepository]=[/Users/aaron/.m2/repository]
[DEBUG] Setting system property [basedir]=[/Users/aaron/Programs/my_program]
[DEBUG] Using JVM: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-junit4:jar:2.7.1:test (selected for test)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:test (selected for test)
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-junit4/2.7.1/surefire-junit4-2.7.1.jar Scope: test
[DEBUG] Adding to surefire test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: test
[DEBUG] Test Classpath :
[DEBUG]   /Users/aaron/Programs/my_program/target/test-classes
[DEBUG]   /Users/aaron/Programs/my_program/target/classes
[DEBUG]   /Users/aaron/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar
[DEBUG] Using manager EnhancedLocalRepositoryManager with priority 10 for /Users/aaron/.m2/repository
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.1:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.1:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-booter/2.7.1/surefire-booter-2.7.1.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: /Users/aaron/.m2/repository/org/apache/maven/surefire/surefire-api/2.7.1/surefire-api-2.7.1.jar Scope: compile
Forking command line: /bin/sh -c cd /Users/aaron/Programs/my_program && /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -jar /Users/aaron/Programs/my_program/target/surefire/surefirebooter6118081963679415631.jar /Users/aaron/Programs/my_program/target/surefire/surefire4887918564882595612tmp /Users/aaron/Programs/my_program/target/surefire/surefire9012255138269731406tmp

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
There are no tests to run.

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.089s
[INFO] Finished at: Mon May 30 12:03:09 EDT 2011
[INFO] Final Memory: 7M/62M
[INFO] ------------------------------------------------------------------------

एक और चीज जो मेवेन को परीक्षण नहीं ढूंढ सकती है अगर मॉड्यूल की पैकेजिंग सही ढंग से घोषित नहीं की जाती है।

हाल के मामले में, किसी के पास <packaging>pom</packaging> और मेरे परीक्षण कभी नहीं चलते थे। मैंने इसे <packaging>jar</packaging> बदल दिया है और अब यह ठीक काम करता है।


जांचें (जुनीट के लिए - 4.12 और ग्रहण सुनिश्चित प्लगइन)

  1. निर्भरता में POM.xml में आवश्यक jUnit संस्करण जोड़ें। मेवेन -> प्रोजेक्ट में निर्यात किए गए आवश्यक जार देखने के लिए प्रोजेक्ट अपडेट करें।
  2. टेस्ट क्लास इस फ़ोल्डर के फ़ोल्डर src / test / java और उपनिर्देशिका के अंतर्गत है (या कॉन्फ़िगरेशन testSourceDirectory में POM में मूल फ़ोल्डर निर्दिष्ट किया जा सकता है)। कक्षा के नाम में 'टेस्ट' शब्द होना चाहिए।
  3. टेस्ट क्लास में टेस्ट विधि एनोटेशन @ टेस्ट होना चाहिए

जुनीट 5 का उपयोग करते समय, मैं एक ही समस्या में भाग गया। मेवन Surefire JUnit 5 परीक्षण चलाने के लिए एक प्लगइन की जरूरत है। इसे हमारे pom.xml जोड़ें:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.21.0</version>
    <dependencies>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.2.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.2.0-M1</version>
        </dependency>
    </dependencies>
</plugin>

स्रोत: https://junit.org/junit5/docs/current/user-guide/#running-tests-build-maven


परीक्षण के लिए परीक्षण की तलाश करते समय डिफ़ॉल्ट रूप से मेवेन निम्नलिखित नामकरण सम्मेलनों का उपयोग करता है:

  • Test*
  • *Test
  • *TestCase

आपकी परीक्षा कक्षा इन सम्मेलनों का पालन नहीं करती है। परीक्षण कक्षाओं के लिए आपको एक और पैटर्न का उपयोग करने के लिए इसे नाम बदलना चाहिए या मेवेन सरेफायर प्लगइन को कॉन्फ़िगर करना चाहिए।


मुझे यह भी पता चला कि इसी परीक्षण के कारण टेस्टिंग निर्भरता इस मुद्दे का कारण बन रही है। पोम से testng निर्भरता को हटाने के बाद (जैसा कि मुझे अब इसकी आवश्यकता नहीं है), यह मेरे लिए ठीक काम करना शुरू कर दिया।

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.8</version>
        <scope>test</scope>
    </dependency>

यदि आप 'सार' के साथ एक परीक्षण उपसर्ग करते हैं तो इसे डिफॉल्ट किया जाएगा, इसे डिफ़ॉल्ट रूप से अनदेखा कर दिया जाएगा।


यदि आपका टेस्ट क्लास नाम मानक नामकरण सम्मेलन का पालन नहीं करता है (ऊपर @axtavt द्वारा हाइलाइट किया गया है), तो आपको मेवेन को टेस्ट लेने के लिए pom.xml में पैटर्न / क्लास नाम जोड़ने की आवश्यकता है -

...
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>**/*_UT.java</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </build> 
...

यदि परियोजना में <packaging>pom</packaging> आपके परीक्षण नहीं चलाएगा

परीक्षण चलाने के लिए आपको पैकेजिंग को जार (या कुछ अन्य जावा आर्टेफैक्ट प्रकार) पर सेट करने की आवश्यकता है: <packaging>jar</packaging>


साथ ही, जांचें कि आपकी टेस्ट क्लास निर्देशिका (जैसे src / test / java) <build> प्रॉपर्टी के अंतर्गत आपके pom.xml में संपत्ति <testSourceDirectory> में सूचीबद्ध निर्देशिका से मेल खाती है। मुझे यह खोजने के लिए थोड़ी देर लग गई।


/my_program/src/test/java/ClassUnderTestTests.java

होना चाहिए

/my_program/src/test/java/ClassUnderTestTest.java

मेवेन उन छोरों को टेस्ट या स्वचालित रूप से चलाने के लिए टेस्ट के साथ शुरू होता है।

हालांकि, आप इसका उपयोग कर सकते हैं

mvn surefire:test -Dtest=ClassUnderTestTests.java 

अपने परीक्षण चलाने के लिए।





maven-3