问题标签 [jmock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
17469 浏览

java - jmock 模拟静态方法

我的代码中有一个静态方法,我想以某种方式模拟。

我正在使用 jmock。

我想我可以做到这一点的一种方法是在静态方法周围有“包装类”并模拟它,但我希望有一个更好的解决方案。

我会以错误的方式解决这个问题吗?

回馈:

我将有一个接口和类,它有一个调用静态方法的方法。它允许我通过模拟对这个包装类的调用来模拟逻辑。(即使谈论它我也觉得很脏:))

0 投票
2 回答
10962 浏览

java - Jmock 如何与 HttpSession 和 HttpServletRequest 一起使用

我是 jmock 的新手,并试图模拟一个 HttpSession。我正进入(状态:

java.lang.AssertionError:意外调用:httpServletRequest.getSession() 未指定期望:您是否... - 忘记以基数从句开始期望?- 调用模拟方法来指定期望的参数?

测试方法:

@测试

我做了一些搜索,但我仍然不清楚这是如何完成的。感觉就像我错过了一些小块。任何有这方面经验的人都可以为我指明正确的方向。谢谢

0 投票
2 回答
919 浏览

unit-testing - 获取/保存参数到预期的 JMock 方法调用?

我想测试一个“适配器”对象,当它接收到 xml 消息时,它会将其消化为 Message 对象,将消息 ID + CorrelationID 与时间戳一起放入并将其转发到 Client 对象。=20 消息可以关联到前一个(例如 m2.correlationID =3D m1.ID)。

我模拟客户端,并检查适配器是否成功调用“client.forwardMessage(m)”两次,第一条消息具有空的correlationID,第二条消息具有非空的correlationID。

但是,我想通过抓取 ID(例如 m1.ID)来精确测试correlationID 是否设置正确。

但我无论如何都找不到这样做。

有一个关于添加该功能的jira,但没有人评论并且未分配。

这真的没有实现吗?

我读到了重新设计适配器以使用 IdGenerator 对象的替代方法,我可以存根,但我认为会有太多对象。=20 你不认为将对象拆分到如此精细的粒度会增加不必要的复杂性吗?

谢谢,我很感激任何评论:-)

塔耶布

0 投票
2 回答
1017 浏览

unit-testing - 为什么在 JMock 中使用 .proxy()?

我正在尝试学习如何使用 JMock,但我对您使用 .proxy() 方法的用途感到有些困惑。我知道它在你的 Mock 类上被调用,但我不明白它的 puprose 是什么。

我没有任何运气找到关于它如何在谷歌上工作的很好的描述。

任何帮助深表感谢。

0 投票
6 回答
21045 浏览

java - 我可以模拟超类方法调用吗?

有时,你想测试一个类方法,并且你想对超类方法的调用做一个期望。我没有找到使用easymock或jmock在java中实现这种期望的方法(我认为这是不可能的)。

有一个(相对)干净的解决方案,使用超类方法逻辑创建一个委托,然后对其设置期望,但我不知道为什么以及何时使用该解决方案¿任何想法/示例?

谢谢

0 投票
4 回答
5799 浏览

java - 使用 JMock 测试具体的第三方类

我有一个转发方法的类foo

我想测试是否foo确实转发。对我来说不幸的是,Concrete它是第三方库中的一个类,是一个具体的类型,而不是一个接口。因此我必须ClassImposteriser在 JMock 中使用来模拟Concrete,所以在我的测试用例中,我这样做:

}

不幸的是,Concrete.bar反过来又调用了一个抛出的方法。该方法是最终的,所以我不能覆盖它。此外,即使我注释掉该行new ClassUnderTest.foo( c, s );,当 JMock 设置异常时抛出异常,而不是在foo调用时抛出异常。

那么我如何测试该方法ClassUnderTest.foo确实转发到Concrete.bar

编辑:
是的,酒吧是最终的。

我的解决方案不是通用的,是使用第三方库中的“Tester”类来正确设置Concrete.

0 投票
2 回答
2728 浏览

java - 使用 Jmock 创建一个模拟来为自己返回一个空值

我有一个类似于以下的方法:

我试图找到一种方法来设置 MyClass 参数 c 的模拟实例,以便它为自己返回 null 值,并且永远不会调用 c.someMethod() 。我的单元测试如下所示:

基本上,我正在设置 MyClass 的模拟实例,并对其设置期望,即当针对空值测试其值时,它将返回 true,并且永远不会调用方法 someMethod()。

现在,测试失败了,因为 jMock 说不可能覆盖 Object 类提供的方法(equals(null) 部分)。

有没有办法用 jMock 做到这一点?这种模式有意义吗?这是一个有效的测试吗?如果没有,是否有人对如何测试有任何建议?

0 投票
4 回答
3904 浏览

java - jUnit - 如何断言调用了继承的方法?

假设您有一些想要扩展的第三方库类,只需为其添加便利方法(例如,您可以使用默认参数调用继承的方法)。

使用 jUnit/jMock,是否可以编写一个断言/模拟期望来测试是否调用了正确的继承方法?

例如,像这样:

我如何断言method正在被调用?

0 投票
1 回答
10933 浏览

java - jMock 模拟类和接口

我正在试验 jMock 作为我项目的模拟框架。我遇到了一种情况,我需要同时模拟一个类和一个接口。我用ClassImposteriser.INSTANCE来启动上下文的冒名顶替者。

假设要模拟一个类Validator和一个接口。Person当我要模拟接口Person时,我遇到了一个问题NoClassFoundDefError。当我嘲笑班级Validator时,没有问题。

我需要那个类和接口,但我无法解决问题。请帮忙。

代码示例:

嘲讽

private Mockery context = new JUnit4Mockery() {{ setImposteriser(ClassImposteriser.Class) }};

班级 :

private Validator validator;

界面 :

private Person person;

内部测试方法

validator = context.Mock(Validator.class);----> 工作

person = context.Mock(Person.class);---->NoClassFoundDefError

0 投票
4 回答
2994 浏览

java - 是否有一种更简洁的方法来测试对列表中每个项目的模拟方法的调用

这是我最近经常遇到的一个模式示例。我有一个要测试的方法,它需要一个列表,并且可以为列表中的每个项目调用一些其他方法。为了测试这一点,我定义了一个带有预期调用参数的迭代器,并在 JMock 预期中定义了一个循环,以检查是否针对迭代器的每个项目进行了调用(参见下面的简单示例)。

我已经查看了 Hamcrest 匹配器,但没有找到可以对此进行测试的东西(或者误解了可用匹配器的工作方式)。有没有人有更优雅的方法?