【发布时间】:2016-09-22 15:56:59
【问题描述】:
我告诉模拟对象等待带有命令的方法: mockObject.registerSQLDriver(isA(SomeName.class));
在运行时方法被 SomeName 类的实例完全调用,但测试失败告诉“意外的方法调用 registerSQLDriver()”
什么会导致这个问题?
代码如下:
resetToDefault(_SQLDriverManager);
_SQLDriverManager.registerSQLDriver(isA(SQLDriver.class));
expectLastCall().anyTimes();
replay(_SQLDriverManager);
【问题讨论】:
-
错误在第 73 行,或者 56 行,或者可能是 865 行。没有代码,很难说。也许你告诉你的模拟这个方法会被调用一次,而实际上它被调用了多次。
-
错误消息显示“意外的方法调用 registerDriver()”。您嘲笑了“registerSQLDriver”方法。这些方法不同。
-
错误消息准确地说明了 registerSQLDriver()。在我看来,这个问题不在 isA() 中。例如,我将其更改为 notNull(),它仍然失败。
-
被测试代码使用的实际 SQLDriverManager 必须是另一个模拟而不是您配置的模拟。你确定你没有配置一个本地的_SQLDriverManager变量,而代码实际上使用了一个实例_SQLDriverManager变量?
-
你是对的。后来我初始化了另一个 Mock 实例。谢谢