【问题标题】:JMockit mock not getting destroyedJMockit 模拟没有被破坏
【发布时间】:2016-08-31 08:10:08
【问题描述】:

使用 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 中定义的模拟,而不是预期的真实实例。

谁能指导如何解决这个问题。

【问题讨论】:

    标签: java unit-testing mockito jmockit


    【解决方案1】:

    您的示例甚至不会运行,因为 mockTestaccess 字段上的 @Mock 注释无效。我想应该是@Mocked?如果是这样,则无需额外使用new MockUp(),因为mockTestaccess 上的@Mocked 在该测试类的测试期间已经模拟了TestAccess 的所有实例,之后将自动恢复。如果您的问题是,getTestAccess() 返回TestAccess 的某个子类,那么它不是模拟实例,您可能想看看@Capturing,它也模拟子类的实例。

    【讨论】:

    • 我正在使用 Junit 进行单元测试。使用 @mock(org.mockito.Mock) 模拟实例。因为我想模拟一个静态方法,所以使用了 jMockito(mockit.MockUp)。刚刚编辑了上面的语句以包含我错过的 mockit.MockUp。测试用例也会运行。
    • 您正在混合两种不同的模拟框架?为什么?我建议不要混合模拟框架,而只使用 JMockit。
    猜你喜欢
    • 2017-10-30
    • 2011-09-19
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多