【问题标题】:Mockito Verify variables set in a mock before calling a methodMockito 在调用方法之前验证在模拟中设置的变量
【发布时间】:2015-10-23 19:39:26
【问题描述】:

我正在尝试围绕一些遗留代码编写一些单元测试,并且我正在努力研究如何测试一段代码。模式基本上是:

Foo foo = ObjectGetter.getObject(Foo.class);
foo.setVariableX("X");
foo.setVariableY("Y");
foo.performExecute();
//The Foo object has now run some business logic
String bar = foo.getVariableZ();

我已经通过 PowerMock 模拟了静态 ObjectGetter 类,并设法传入一个模拟的 Foo 对象。我现在要做的是在运行 performExecute 时检查变量 X 和 Y 是否设置为 Foo 中的预定值,但实际上并未在 Foo 中运行任何代码。然后当 getVariableZ 被调用时传回某个值。

我可以让 VariableZ 传回我想要的任何东西,但我不知道如何将变量 X 和 Y 设置为特定值的条件!我正在使用 Mockito 和 PowerMock。可以说由于各种原因我无法更改我正在测试的代码。

【问题讨论】:

  • 我不明白。如果你在嘲笑 Foo,你为什么要关心它在内部做什么?
  • 我想确保运行此代码的类已将正确的参数传递给 Foo 否则我将盲目地假设它有并可能错过错误。我实际上并不关心它在内部做了什么,只是它传递了正确的参数。
  • 那么您应该将Foo 作为一个单元进行测试,而不是模拟它。

标签: java unit-testing testing mockito powermock


【解决方案1】:

如果你想验证 mock foo 中的某些方法是否被正确调用,你可以简单地写...

Mockito.verify( foo, Mockito.times(1)).setVariableX("x");

如果对象foo 的方法setVariableX 没有被恰好调用一次,这将导致测试失败。您无法真正测试变量“x”,因为它实际上并不存在于您的模拟中,但您可以验证 setter 是否被正确调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多