【发布时间】:2018-07-26 14:09:29
【问题描述】:
我非常熟悉脚本语言中的模拟。在我使用的大多数语言中,都有一个模拟框架允许您调用假函数。例如,在 JavaScript 中,您将使用 sinon 并调用 callsFake,然后传入一个函数:
var sandbox = sinon.createSandbox();
sandbox.stub(myObject, 'some_method').callsFake(() => {
//do stuff
});
在 Perl 中,您可以使用 Test::MockModule->mock:
my $mockedModule = Test::MockModule->new('Some::Module');
$mockedModule->mock('someMethod', sub {
#Do stuff
});
在 Java 中可以做到这一点吗?我在 Java 中能做的最好的事情是使用 Mockito 通过调用 when(mock(MyClass.class).method()).thenReturn("foo"); 返回一个固定值。但是,当调用MyClass.method() 时,它总是返回"foo",并且什么也不做。我想知道是否可以改为告诉 Mockito 调用假方法而不是调用真实方法。
这在 Mockito 或其他一些 Java 模拟框架中是否可行。
【问题讨论】:
-
也许只是创建一个扩展您要模拟的类的类可以工作?
-
不确定我是否在此处关注您的问题。您不是在测试模拟,而是在测试使用模拟做一些有价值的事情的类。你不希望你的被测类调用 realClass.method(),而是 mockedClass.method()。最终,您想知道每个模拟上的正确方法被调用并返回预期结果,但这是为了测试被测类。
-
@MichaelPeacock 我使用其他语言的示例添加了一些说明
标签: java unit-testing mocking mockito