我想知道最好的方法来测试
ruby mixin模块,在这种情况下用于ActiveRecord模型,但是这是一个普遍的问题,适用于任何使用mixin扩展的类.
尝试存储您的mixin正在扩展的Class的所有必要功能,或者只是在您的应用程序中测试现有和扩展的真实类,最好?
Stubbing将删除测试的外部依赖关系,但是无法在实际情况下测试mixin.如果测试失败,可能是您的实现或您所扩展的类更改或损坏.如果使用stubbed类进行测试,您的测试可能会通过,但是如果您正在扩展的类更改,那么功能可能会被破坏.
意见?
解决方法
对我来说这是不完全清楚的,但是我要假定它是一些东西,如果我有一个类,我用一个模块来扩展这个类,我应该在哪里测试模块?“
就个人而言,当我写一个模块作为一个mixin,我试图确保它有相当强大的测试,独立于我可能最终计划混合的任何类.通常,我将在测试套件中定义一个类,但不能扩展到模块,然后编写测试以确保测试类具有所有预期的功能. (您可以在我的Classy gem中看到这个例子,这只是一个mixin模块的集合.)如果模块是为了扩展ActiveRecord或者其他类,我没有任何控制,我将定义为香草ActiveRecord类尽可能地和它一起工作,但是尽管如此,尽管如此,我仍然会尝试将ActiveRecord的模块的功能保持正交.
如果更改ActiveRecord导致您的测试中断,那么有一个问题,您的目标是在写你的模块.如果您希望它对公众普遍可用且有用,那么您可能希望它能够使用最新版本,而那些失败的测试会准确地报告需要修复的错误.如果您只希望使用本地为您自己的项目运行的任何版本,那么您只需对该版本执行测试,您就不必担心它会发生变化.
假设我控制了混合的类,我可能不会在该类的测试中太广泛地测试模块的功能 – 这就是模块测试所要做的.我会有一个或两个测试用例,以确保它通常工作,我将测试与被测试类特定的任何特定的互动或复杂性,并且可能会留下它.