簡體   English   中英

want to execute a java test class which is in src/test/java from src/main/java but I am unable to import that java class in src/main/java?

[英]want to execute a java test class which is in src/test/java from src/main/java but I am unable to import that java class in src/main/java?

In my requirement I need to execute the Junit test class in src/test/java from a java class in src/main/java , but I am unable to import the java class present in src/test/java from src/main/java .

理想情況下 Maven 結構也將期待主代碼將是src/main/java和測試代碼將在src/test/javasrc/main/java不應該依賴於src/test/java

但就我而言,我想從src/main/java的主程序執行 Junit class 但我無法從src/test/java導入該 class 。

請向我提供有關如何實現此目標的任何建議,或者是否有任何方法可以在 POM 文件中提及,以便 maven 允許我從src/test/java中的src/main/java導入 class 。

這是不允許的操作。 Maven 允許您在測試代碼中引用src/main/java中的所有代碼,反之亦然。

在生產代碼中依賴僅在測試時可用的東西在語義上是不正確的。 在生產中想象你的測試代碼甚至不存在( src/test/java下的任何東西都不可用,但src/main/java應該仍然有效)。

如果您確實需要主代碼中的功能,建議在src/main/java下的某處重構代碼,然后在您最初需要它的 class 以及測試代碼中使用它。

例如:

// src/main/java
class Production {
    void foo() {
        someTestClass.bar();
    }
}

// src/test/java
class SomeTestClass {
    void testSomething() {
        bar();
    }
    void bar() {
    }
}

上面的代碼不會編譯,但你可以像這樣重構它:

// src/main/java
class Production {
    void foo() {
        utility.bar();
    }
}
class Utility {
    void bar() {
    }
}

// src/test/java
class SomeTestClass {
    void testSomething() {
        utility.bar();
    }
}

因為依賴是單向的,所以代碼現在對src/main/javasrc/test/java都可用。

如果您希望一個 Maven 項目的測試代碼依賴於另一個 Maven 項目的測試代碼,那么您應該使用 scope test聲明依賴關系,如下所示:

        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>cool-testing-dependency</artifactId>
            <scope>test</scope>
        </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM