簡體   English   中英

在Eclipse中的測試包中添加了一個junit測試文件,但該文件無法運行

[英]Added a junit test file to the test package in eclipse but it will not run

我在Eclipse IDE中使用JUnit4。 我有一個包含7個測試的測試文件,通過選擇Run As JUnit可以正常運行 我為另一個測試集添加了另一個文件。 我的文件中有1個測試。 我相信我正確地創建了測試...這個文件/測試

@RunWith(MockitoJUnitRunner.class)
public class CloseSummaryOrCloseTrailerResponseTest {

    @InjectMocks
    XMLTransaction xmlTransaction;

    @Before
    public void initMocks() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void whenCloseSummaryResponseNoErrorExpectCorrectXmlMsgProduced ()
{
..code to run the test
}
}

當我選擇文件並選擇“ Run As Junit”時,什么也沒有發生。 我想念什么?

更新抱歉,信息不完整...

項目樹如下:src / java / ...源文件src / test / com / javaserver / transaction / RequestTest.java /com/javaserver/transaction/ResponseTest.java

我可以運行RequestTest文件,所有測試都通過。 當我嘗試運行ResponseTest文件時,最初沒有任何輸出。 我重新啟動了Eclipse,當我運行響應測試時,出現了錯誤:

org.mockito.exceptions.base.MockitoException:無法實例化類型為“ class”的名為“ xmlTransaction”的@InjectMocks字段...

我導入了XMLTransaction類。 但是它不能被實例化。 我沒有主要方法。 我認為通過添加@RunWith(MockitoJUnitRunner.class)可以運行該類。 它運行另一個類文件。

更新看起來我要模擬的對象需要一個1參數構造函數。 構造函數如下所示:

XMLTransaction xmlTrans = new XMLTransaction(URL)

該URL僅是文本字符串,而不是實際的URL。 但是,如何實例化對象? 如果將其放在@InjectMocks下,則會出現編譯錯誤:

默認構造函數無法處理由隱式超級構造函數引發的異常類型。 必須定義一個顯式構造函數

更新我需要使用PropertyManager類來創建XMLTransaction類。 我在@InjectMocks下使用以下代碼來做到這一點:

String wlUrl = PropertyManager.getInstance().getProperty(URL);

但是然后我得到了錯誤:無法處理屬性異常。

更新我嘗試將@MockInjects替換為@Mock並使用init()創建類:

 public final static String URL="WL_APPSERVER";  
    @Mock
    XMLTransaction xmlTransaction;  
    @Before
    public void initMocks() throws Exception {
        XMLTransaction xmlTransaction = new XMLTransaction(URL);
    }

我收到錯誤:Mockito無法模擬此類:class

com.fedex.ground.tms.javaserver.dock.transaction.XMLTransaction。 Mockito只能模擬非私有和非最終類。 底層異常:java.lang.IllegalArgumentException:無法創建類型

如果添加不帶參數的默認構造函數,則會出現相同的錯誤。 這是公開課,不是最終課程。

更新我通過添加PropertyManager的實例解決了上述問題。 該對象需要一個屬性文件。
現在的錯誤是它找不到屬性文件。 我現在有這個。

@RunWith(MockitoJUnitRunner.class)
public class CloseSummaryOrCloseTrailerResponseTest {

     public final static String URL="WL_APPSERVER";
     public final static String PROP_FILE = "src/config/tms20.properties";

    @Mock
    XMLTransaction xmlTransaction; 

    @Mock
    PropertyManager propertyManager;

    @Before
    public void initMocks() throws Exception {
        MockitoAnnotations.initMocks(this);
        Properties p = new Properties();
        p.load(new FileReader(new File(PROP_FILE)));
        propertyManager.getInstance(PROP_FILE);
        XMLTransaction xmlTransaction = new XMLTransaction(URL);
    }

我需要識別什么屬性文件?

將測試按如下所示放置在層次結構中:

project
    src
        main
             java      // source files
             resources // xml, properties etc
        test
             java      // source files
             resources // xml, properties etc

代碼必須是這樣的:

 @RunWith(MockitoJUnitRunner.class)
 public class ExampleTest {

     @Mock
     private List list;

     @Test
     public void shouldDoSomething() {
         list.add(100);
     }
 }

https://static.javadoc.io/org.mockito/mockito-core/2.6.8/org/mockito/junit/MockitoJUnitRunner.html

問題在於構造函數正在調用私有方法來初始化類。 由於Mockito無法處理私有方法,因此我通過使用PowerMock解決了該問題。

暫無
暫無

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

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