使用JUnit测试类-
有一个类TestAccess.java
具有
static private TestAccess instance = new TestAccess();
public static TestAccess getTestAccess() {
returns instance;
}
为了测试测试类
A.java
,使用了JMockit来模拟getTestAccess
方法@Mock
TestAccess mockTestaccess;
@Test
public void testMethod() {
new MockUp<TestAccess>() {
@mockit.Mock
public TestAccess getTestAccess() {
return mockTestaccess;
}
};
TestAccess test=TestAccess.getTestAccess();
}
在另一个类
B.java
中,我不想使用模拟并调用TestAccess.java
如下@Test
public void doTest()
{
TestAccess test=TestAccess.getTestAccess();
}
B.java
如果独立运行,则返回真正的TestAccess
实例,并且可以正常工作。但是,在maven运行期间,即使在
B.java
中,它也会失败TestAccess.getTestAccess()
返回A.java
中定义的模拟,而不是预期的真实实例。任何人都可以指导如何解决。
最佳答案
同样,您的示例甚至都不会运行,因为模拟测试访问字段上的@Mock
注释无效。我猜应该是@Mocked
吗?如果是这样,则无需额外使用new MockUp()
,因为@Mocked
上的mockTestaccess
将已经在该测试类的测试过程中模拟掉了TestAccess
的所有实例,之后将自动还原。如果您遇到的问题是,getTestAccess()
返回TestAccess
的某个子类,那么它不是模拟的实例,您可能想看看@Capturing
,它也模拟了子类的实例。
关于java - JMockit模拟不会被销毁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39244089/