首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MockBox模拟瞬态对象

使用MockBox模拟瞬态对象
EN

Stack Overflow用户
提问于 2013-06-25 05:17:36
回答 1查看 382关注 0票数 1

我在模型的顶部有这个注入元数据:

<cfproperty name="injector" inject="wirebox" />

然后,在一个函数中,我请求一个依赖项并开始使用它:

variables.injector.getInstance("MyTransientDependency").doSomeStuff()

在编写单元测试时,我想模拟MyTransientDependency对象,但我不确定如何进行,而它是由wirebox提供的。

为了给出一个更真实的例子,假设wirebox在同一个函数中多次调用getInstance(),每次都传入不同的名称。因此,模拟getInstance函数的返回将是一件痛苦的事情,如果在内部请求依赖项的顺序发生了变化,而没有以需要更新单元测试的方式更改函数的行为,那么(如果使用了类似$results()的方法)还会带来维护方面的噩梦。无论如何,这种方法让人感觉很讨厌。

我猜有一种直接的方法可以劫持variables.injector引用,并为我的组件提供一个wirebox实例(或类似的实例),它将返回我在单元测试中指定的模拟,而不是应用的绑定器(Wirebox.cfc)中映射的实际对象……并根据我正在测试的代码中传递给getInstance()函数的名称执行此操作。

这有点棘手的地方是,如果你想在一个单独的函数中进行测试,你会得到同一命名对象的多个实例,你需要在这些实例上模拟相同的函数来返回不同的结果(比如你测试的函数需要2个' person‘对象,并将其中一个初始化为A类型的person,另一个初始化为B类型的person,而person组件期望从你需要模拟的特定函数返回不同的结构化数据。在这种情况下,您可能无法摆脱使用$results()之类的东西,也许这就是它的用途。

但我的主要问题是,模拟瞬变的“正确方式”是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 05:27:14

见鬼。在文档中搜索了一下,我找到了。

http://wiki.coldbox.org/wiki/MockBox.cfm#.24args()概述了如何使用$args()来模拟函数和特定参数(或一组参数)组合的结果。

有关用法的示例,请参阅此示例代码中的getWireBox函数:https://groups.google.com/forum/#!msg/coldbox/FoXPjEf798g/rVKhN-8VY34J

我们模拟wirebox,然后在传入不同的值时使用$args()模拟getInstance函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17285289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档