有没有类似于TypeMock的开源模拟框架?

19

TypeMock对于像我这样的业余爱好者来说太昂贵了 :)

Moq或RhinoMocks的下一个版本没有计划监听分析API,为什么?

编辑:这可以实现以下功能:

  • 模拟非虚方法和属性(!)。
  • 模拟浏览器环境。
  • 更简单的语法, less fragile(不需要通过模拟对象)。
  • 模拟静态方法有时很有用(主要在涉及可怕的DateTime.Now的遗留方案中)。
  • 还有更多..

5
对我来说,这似乎不像是一则广告,听起来更像是有人在寻找一个开源软件的替代品,以取代付费产品。如果这确实是一则广告,那么它可能是我见过最糟糕的广告之一,基本上是在说“这个产品太贵了!” - dbr
1
"而且还有更多..." 下方是一个指向Isolator官网的链接,紧接着是TypeMock(毋庸置疑地独特)功能列表。看起来像一则广告...如果你不同意,我很抱歉。 - Anderson Imes
4
TypeMock的定价荒谬(每个开发者的价格为800美元到1,200美元!)。 - gkdm
@ohad:只是说它看起来像一则广告,而不是一则好广告。我喜欢你的产品(事实上,我已经向我的公司推荐购买了它!)。我的回答纯粹是为了说明为什么一个开源组织很可能不会努力创建像Type Mock这样先进的东西,因为对他们来说没有成本效益比。大多数开源库都假定有一个绿色领域,而Isolator并非如此。 - Anderson Imes
@AndersonImes,你对于像Type Mock这样的开源开发者创建工具的“成本效益比”假设是错误的。我可以这么说,因为我就是一个开源开发者,我创建了这样一个工具,虽然是针对Java而不是.NET。我的最初动机只是因为我想为面向对象的Java代码编写隔离的单元测试,但现有的模拟工具却无法满足我的需求。 - Rogério
显示剩余3条评论
8个回答

11

TypeMock对像我这样的业余爱好者来说价格太贵了。

可能对于免费开发和发布来说也太昂贵了。


11

声明:我在Typemock工作。

我会尝试回答您的问题:

有没有类似TypeMock的开源模拟框架?

唯一使用分析器API的其他框架是商业的JustMock。

Moq或RhinoMocks的下一个版本没有计划监听分析API,为什么?

我认为这是一种思想意识。Rhino mocks的创建者Ayende和moq的创建者Kzu相信设计可测试性,并且模拟框架应该帮助您实现这种设计,因此即使很容易,他们也不会实现Isolator的功能。

TypeMock对像我这样的爱好者来说太贵了。

如果您在家工作,可以购买更便宜的个人许可证(我不想在这里发布Isolator购买页面的链接,但我相信您可以找到它。)

希望有所帮助。


3
我认为这不是意识形态问题,而是纯粹的技术难题。实际上,Ayende说他会接受一个补丁程序,以增加对静态方法模拟的支持:http://ayende.com/Blog/archive/2008/05/20/Would-I-add-static-mocking-to-Rhino-Mocks.aspx - Rogério

5
如果你正在从事开源项目,你可以获得Typemock Isolator的免费许可证(但仅限于在该项目中使用)。点击此处获取免费许可证。

太穷了,没法同时从事操作系统的工作 :) (开个玩笑)。问题只是出于好奇。 - gkdm
1
不是一个好主意,因为现在任何人下载你的源代码都无法在没有有效许可证的情况下运行你的测试。 - sjdirect

4

为什么Moq或RhinoMocks的下一个版本没有计划使用分析API?

因为这非常困难,需要一定的C++知识


2
尝试一下,你会发现这是一个没有文档记录的、非常严苛的API。 - Dror Helper
3
@gkdm,请看这里:http://msdn.microsoft.com/zh-cn/magazine/cc188743.aspx - RichardOD

1

因为TypeMock只有在测试不考虑可测试性的代码时才有用。这种情况有限,通常可以解决。

简而言之,TypeMock对于以下程序员很有用

  • 没有太多TDD经验,还没有找到如何编写可测试代码的方法
  • 有很多遗留代码需要进行测试

这使得这个功能对于那些需要它的人非常有价值,但对于免费软件来说,成本与社区效益之比非常低。


5
我不同意,我认为非虚拟方法在从头开始用TDD构建的系统中也有用武之地。这是最让我困扰的问题,它会大大影响我的设计。此外,TypeMock具有较少仪式感的语法,这对于单元测试很重要。 - gkdm
1
没有理由不使用接口来避免使用虚拟方法。就仪式而言,我不认为TypeMock比Moq更容易使用。 - Anderson Imes
1
我认为如果你需要模拟一个实体,那么你的实体设计没有正确地分离关注点。没有理由去模拟一个实体。如果你这样做了,那它就不是一个实体。 - Anderson Imes
1
TypeMock很有用,即使你没有考虑可测试性。 - Judah Gabriel Himango
当然可以,但如果你想要构建可测试性的代码,那800美元到1200美元的开销就不容易被证明是合理的。 - Anderson Imes
显示剩余11条评论

0

我知道这个问题是针对.NET世界的,但是如果有人想知道Java世界中是否存在类似的东西,我的回答是“是的,有”。

JMockit 工具包是开源的(MIT许可证),除非我漏掉了什么,否则它甚至比TypeMock更强大。(具体来说,我没有看到TypeMock中有任何与JMockit中的@Capturing注释提供的功能相当的东西。)


0

gkdm问我如何计划为静态和动态对象添加代理支持http://beanproxy.codeplex.com/,我的答案是我不知道该怎么做。我研究了各种想法,但都没有成功。我最接近的解决方案是创建一个分析库,但这需要测试人员将我的库作为分析器运行,她不能只是运行我的库进行测试。我花了几天时间阅读和测试各种想法,但都无济于事。我放弃了这个搜索,但如果有人有任何想法,我仍然愿意接受。Beanproxy仍然是许多开发人员使用的优秀工具。如果您对beanproxy有任何特定需求或问题,请使用codeplex上的问题和讨论选项卡。我一直在努力改进它。


好的,使用C# 5.0他们计划开放编译器以进行扩展,我认为这将有所帮助。编辑:也许他们还会很友善地添加一个体面的拦截机制。 - gkdm

0

看看 http://beanproxy.codeplex.com/。这是我开发了一段时间的工具。它目前还不支持非虚拟代理(除了抽象和接口)和不支持实时对象(代理实时对象)。然而,它是免费且开源的。它非常容易使用,仍在不断开发中(计划支持非虚拟和实时对象)。


你打算如何实现这个目标? - gkdm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接