当前位置: 首页 > 知识库问答 >
问题:

Intellij中支持EasyMock的调试器?

江光明
2023-03-14

也许这会适得其反,我不知道,但现在我需要一个IntelliJ中的调试器,它可以了解EasyMock Mock,尤其是mocks方法实际返回的内容。

例如,我有一个传输接口ITransfer,其中有一些必须被模拟的方法,并且我只希望一些方法返回一些东西。例如。

ITransport myTransport = createMock(ITransport.class);

我要我的交通工具。getID()返回模拟的ID 10。

expect(myTransport.getID()).andReturn(10);

对于ID 10,我希望调用一次方法,

expect(myTransport.publish(any(...)));

expectLastCall.once();

transport类中的某些内容中断,并且没有调用myTransport,我的测试失败。我只想使用调试器逐步检查代码,以检查测试失败的原因。因此,我添加了一个断点来验证模拟的myTransport对象的值。但是它们都说“null”,甚至是ID。因此,经过一些简单的调查,我假设这是因为EasyMock mock类,它并没有真正用值更新对象(听起来很合理),而是在调用方法时在运行时返回模拟值。

那么,是否有任何支持模拟的IntelliJ调试器可以让我看到该方法最终将返回哪个值。

是的,在我收到回复说“如果您为所有内容编写单元测试,则不需要调试器”之前,我只想声明我知道这一点。这是遗留代码,或者至少是没有考虑到测试而编写的代码。

共有2个答案

傅正豪
2023-03-14

实际上,这些方法是被模拟的,但类的内部实现是留给它自己的。

通常,您不需要知道返回了什么,因为您是首先记录它的人。

您还可以在调试器中评估myTransport.getID()。但是这样做会消耗期望。

然而,在模拟中列出所有当前待定的期望似乎是一个好主意。也许还有一个窥视功能。您可以在EasyMock bug tracker上请求这些功能:http://jira.codehaus.org/browse/EASYMOCK

韩梓
2023-03-14

这可能不是你想要的...但是感觉问题更多的是在调试方法上。

模拟对象实际上就是一个模拟对象,意味着它是一个假的空对象,除非你明确告诉它,否则它什么都不会做。当调试器检查模拟对象时,它将找不到任何没有专门编程以返回的值。它并不意味着持有价值观。

EasyMock有一个参数捕获功能,但由于您只是希望它用于调试,因此这可能是错误的方法。Mockito有一个间谍功能,可能适合您想要的,但它会涉及额外的模拟编程语句。

我想说最简单的方法是实现您自己的ITransfer仅供在您的测试类中使用。这样,您可以实现getID()以始终返回10并在您的发布()中放入断言语句。您可以实现任何其他需要的方法来捕获额外的数据以用于调试目的。并且您可以保留此仅限测试的ITransfer以供共享使用或未来的调试需求。

 类似资料:
  • 我正在通过gradle-intellij-plugin使用IntelliJ SDK编写一个插件。 我还将智能J插件的罐子添加到SDK类路径中 任何想法的原因?如何为这些专家/格拉德的东西引入支持?

  • 问:IntelliJ SonarQube插件何时支持多模块Gradle项目? 我在SonarQube用户邮件组(2015-04-07)中问了这个问题,得到的答复是,对多模块Gradle项目的支持将在“下一个冲刺阶段”实现。由于stackoverflow已被指定为解决此类问题的首选新方法,我认为在这里收集有关此特性请求的信息是合适的。 繁殖的步骤 在IntelliJ理念中: 设置/插件:安装Sona

  • 主要内容:断点,Evaluate表达式,Step Into,Step Out,Resume Program,Inspecting variablesIntellij Idea 调试功能,允许我们跟踪正在运行的代码,检查代码状态和​​执行流程。IntelliJ IDEA 调试器帮助我们轻松调试从最简单的代码到复杂的应用程序的任何内容。使用 IntelliJ 调试器,我们可以执行以下步骤 - 在任何时候停止程序的执行、单步执行函数、行断点、检查变量、评估表达式等。一些 Java 内置调试​​器是:

  • 井。我交叉编译了android的qemu,当我使用用户模式运行程序时,它显示有一个不受支持的ioctl调用。例如,我运行: 它给了我 因此,我认为我可能想要做的是手动添加ioctl调用。但问题是我只知道cmd号码,我怎么能弄清楚我应该添加什么?谢谢!

  • 问题内容: 这可能吗?我尝试过,但EasyMock抱怨时间必须> = 1 问题答案: 我设法提出了一个解决方案:

  • 问题内容: 我刚刚发现了CSS属性,它为我解决了一堆跨浏览器布局问题。 我现在唯一的问题是IE7似乎不支持它。是否有破解程序可以使IE7支持它? 问题答案: 我假设您正在使用它来解决IE6盒模型。不幸的是,实际上没有通用的方法可以诱骗早期版本的IE支持任意CSS属性。 我建议不要使用该属性,因为除IE6之外的所有浏览器都将正确实现box模型。在维基百科的文章做了解释如何IE6不同的一个好工作。 为