java - 在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);
}
我需要什么来识别属性文件?
解决方案
将您的测试放在这样的层次结构中:
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
推荐阅读
- java - 使用 Java 使用 selenium 在电子应用程序上切换句柄
- magento2 - Magento 2.4.1 将 vat_id 添加到新订单确认模板
- react-native - 如何在 react-native 中映射来自 redux 的数据
- webgl - 当结构包含数组时从结构数组存储结构会导致编译错误
- html - Bootstrap 响应式按钮大小
- c - C:放置和使用malloc
- django - 如何为 Django 应用程序将 Amazon Elastic Beanstalk Linux 1 升级到 Linux 2
- ios - 使用 Xcode 12.4 无法正确设置 UIDatePicker 宽度
- gnu-make - 尽管使用了目标文件,GNU make 仍会重新编译
- gitlab-ci - Kubernetes 中的 GitLab Runner 安装