我正在Eclipse IDE中使用JUnit4。我有一个包含7个测试的测试文件,通过选择以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” ...
我导入了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);
}
我需要识别什么属性文件?
答案 0 :(得分:0)
将测试按如下所示放置在层次结构中:
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 :(得分:0)
问题在于构造函数正在调用私有方法来初始化类。由于Mockito无法处理私有方法,因此我使用PowerMock解决了该问题。