【问题标题】:Added a junit test file to the test package in eclipse but it will not run在eclipse中的测试包中添加了一个junit测试文件但它不会运行
【发布时间】:2019-07-31 14:27:46
【问题描述】:

我在 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:无法实例化 @InjectMocks 字段名为 'xmlTransaction' 类型为 'class...

我导入了 XMLTransaction 类。然而它不能被实例化。 我没有主要方法。我想通过添加 @RunWith(MockitoJUnitRunner.class) 它运行类。它运行另一个类文件。

更新 看起来我要模拟的对象需要一个 1 参数构造函数。 构造函数如下所示:

XMLTransaction xmlTrans = new XMLTransaction(URL)

URL 只是一个文本字符串,而不是实际的 URL。 但是我如何实例化对象呢? 如果我把它放在@InjectMocks 下,我会得到编译错误:

默认构造函数不能处理异常类型 Exception throw by 隐式超级构造函数。必须定义显式构造函数

更新 我需要使用 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);
    }

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

【问题讨论】:

  • 能否请您提供这些测试文件所在的项目树?
  • “没有任何反应”。那意味着什么?在哪里?
  • public static void main(String[] args) 在哪里?它是从哪个文件运行的?
  • "项目树如下:src/java/...源文件 src/test/com" - src/test 中缺少 java 文件夹,com 应该在其中 - 例如src/test/java/com/...
  • 路径一致..我不想写整个文件夹列表。

标签: java junit4


【解决方案1】:

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

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

【讨论】:

  • 我做到了。我收到上面的错误(默认构造函数无法处理异常)。当我使用 1 参数构造函数时,它使用具有属性异常的属性管理器类,我得到一个未处理的异常错误。
  • 这可能对你有帮助吗? tedvinke.wordpress.com/2014/02/13/…
【解决方案2】:

问题在于构造函数正在调用私有方法来初始化类。由于 Mockito 不能处理私有方法,所以我使用 PowerMock 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2014-09-24
    • 2012-06-02
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2010-09-30
    相关资源
    最近更新 更多