ruby-on-rails – 如何测试一个ruby Mixin模块?

我想知道最好的方法来测试 ruby mixin模块,在这种情况下用于ActiveRecord模型,但是这是一个普遍的问题,适用于任何使用mixin扩展的类.

尝试存储您的mixin正在扩展的Class的所有必要功能,或者只是在您的应用程序中测试现有和扩展的真实类,最好?

Stubbing将删除测试的外部依赖关系,但是无法在实际情况下测试mixin.如果测试失败,可能是您的实现或您所扩展的类更改或损坏.如果使用stubbed类进行测试,您的测试可能会通过,但是如果您正在扩展的类更改,那么功能可能会被破坏.

意见?

解决方法

对我来说这是不完全清楚的,但是我要假定它是一些东西,如果我有一个类,我用一个模块来扩展这个类,我应该在哪里测试模块?“

就个人而言,当我写一个模块作为一个mixin,我试图确保它有相当强大的测试,独立于我可能最终计划混合的任何类.通常,我将在测试套件中定义一个类,但不能扩展到模块,然后编写测试以确保测试类具有所有预期的功能. (您可以在我的Classy gem中看到这个例子,这只是一个mixin模块的集合.)如果模块是为了扩展ActiveRecord或者其他类,我没有任何控制,我将定义为香草ActiveRecord类尽可能地和它一起工作,但是尽管如此,尽管如此,我仍然会尝试将ActiveRecord的模块的功能保持正交.

如果更改ActiveRecord导致您的测试中断,那么有一个问题,您的目标是在写你的模块.如果您希望它对公众普遍可用且有用,那么您可能希望它能够使用最新版本,而那些失败的测试会准确地报告需要修复的错误.如果您只希望使用本地为您自己的项目运行的任何版本,那么您只需对该版本执行测试,您就不必担心它会发生变化.

假设我控制了混合的类,我可能不会在该类的测试中太广泛地测试模块的功能 – 这就是模块测试所要做的.我会有一个或两个测试用例,以确保它通常工作,我将测试与被测试类特定的任何特定的互动或复杂性,并且可能会留下它.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...