【问题标题】:jmockit verifications block throwing Missing 1 invocation to methodNamejmockit 验证块将 Missing 1 调用抛出到 methodName
【发布时间】:2017-07-21 14:50:49
【问题描述】:

我正在尝试运行一个测试用例,它将数据更新到数据库中。这是我的测试方法源代码。

@Tested // This is class-level scope as I have different test methods.
FirstLevelClass firstLevelClass;

@Test
public void testUpdateDB(@Mocked SecondLevelClass secondLevelClass) throws Exception {

        // Updated method by passing an argument.
        firstLevelClass.updateDatabaseThroughSecondLevelClass(info);

        new Verifications() {{
            SecondLevelClass.updateDB(creds, data);
            times =1;
        }};

我的目的是验证对模拟方法的预期调用[记录在期望中]。但是,验证块给出以下异常消息。如果我删除 times=1,那么测试用例就会成功。这不是我想要的结果。谁能告诉我我的测试用例可能出了什么问题。

mockit.internal.MissingInvocation:缺少 1 次调用: SecondLevelClass#updateDB(信用,数据) 带参数:信用,数据

原因:缺少调用

更新问题:

updateDatabaseThroughSecondLevelClass(info) 有一个参数,根据该参数,我们在 SecondLevelClass 中形成 creds 引用。

Credentials creds = info.getCredentials();

但是在验证块[这是 FirstLevelClass 的一部分]我们已经在本地创建了测试对象。

Credentials creds = getCredsTestObject();

这就是它抱怨Missing invocations的原因。因为两者都是两个类中的两个不同引用。谁能建议我如何处理这种情况。

提前致谢。

【问题讨论】:

  • credsdata 来自哪里?我猜它们与从updateDatabaseThroughSecondLevelClass 实际传递给updateDB 的值不同,因此您会得到“缺少的调用”。顺便说一句,最新版本的 JMockit 不再有 NonStrictExpectations 类;此外,如果要在测试结束时进行验证,那么记录这种期望是没有意义的(这是多余的)。此外,@Tested 自己创建一个实例,无需显式执行。花几分钟阅读文档,有很多例子。
  • Rogerio,请阅读我更新后的问题,并提出任何处理此案的方法。
  • 该问题仍然缺少基本信息:infocredsdata 在用于测试之前是如何创建的?如果显示FirstLevelClass 的代码也会有所帮助。

标签: java unit-testing testng jmockit


【解决方案1】:

TestNG 和 JMockit 集成中的一个已知问题:https://github.com/jmockit/jmockit1/issues/337

【讨论】:

  • 嗨 Juherr,我在其他类中使用了相同的概念,它的工作。只有在这门课上我才面临问题。
  • 在调试过程中,当流量达到 times=1 时,会抛出异常。找不到导致此问题的确切原因。
  • 该问题与TestNG无关。显然(未显示被测代码...),调用 updateDB 时使用的参数根本不等于预期中使用的参数。
猜你喜欢
  • 2011-06-28
  • 2016-04-27
  • 2018-05-19
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2013-07-16
相关资源
最近更新 更多