【发布时间】: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/...
-
路径一致..我不想写整个文件夹列表。