【问题标题】:JMockit: Verifying if a fake class method is calledJMockit:验证是否调用了假类方法
【发布时间】:2018-03-08 11:05:38
【问题描述】:

我目前有以下代码用于测试:

public class FakeClass extends MockUp<RealClass>
{
    @Mock
    public void doSomething() {
        ...
    }
}

void testHandleMetrics() {
    FakeClass fakeClass = new FakeClass();

    try {
        RealClassUser realClassUser = new RealClassUser();
        realClassUser.useDoSomethingMethod(); //This calls doSomething

        new VerificationInOrder() {
            {
                fakeClass.doSomething();
            }
        };
    } catch (Exception e) {
        fail("FAILED");
    }
}

即使我在 VerificationsInOrder 块中放置了一个失败的组合(即放置另一个方法),测试仍然通过。关于将 Verifications 块与假类一起使用,我有什么不明白的地方吗?

谢谢!

【问题讨论】:

  • 你不应该像这样混合伪造和模拟 API... 花一些时间阅读(相当短的)Getting started 页面,它会清除一切。

标签: java unit-testing jmockit


【解决方案1】:

看起来您在模拟依赖项时遗漏了一些要点:

你的 realClass 是如何知道模拟的?

这个问题通常通过依赖注入来解决。这意味着您的 realClass 不会实例化依赖项本身,而是从外部将其注入,最好作为构造函数参数。

【讨论】:

    【解决方案2】:

    AFAIK,可能不涉及验证方法。 FullVerificationInOrder 非常严格。我个人更喜欢期望块(请参阅此处的工作示例:https://github.com/ko5tik/jsonserializer/blob/master/src/test/de/pribluda/android/jsonmarshaller/JSONMarshallerTest.java

    您的测试类如何获取 mocjed 实例以在其中执行调用?暂时没用过

    而且我也更喜欢参数上的@Mocked 注解。

    你应该从测试中删除 try-catch 块 - 这里没有必要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多