首页 > 解决方案 > 在eclipse中的测试包中添加了一个junit测试文件但是它不会运行

问题描述

我在 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:无法实例化名为“xmlTransaction”的类型为“class ...”的@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);
    }

我需要什么来识别属性文件?

标签: javajunit4

解决方案


将您的测试放在这样的层次结构中:

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


推荐阅读