当我使用 grails test-app -integration
运行我的集成测试套件时,所有测试都通过了。但是,当我使用 grails test-app
运行它们时,单元测试通过了,但集成测试失败并出现错误:
Cannot set readonly property: requestAttributes for class:
org.springframework.web.context.request.RequestContextHolder
现在,我搜索了 RequestContextHolder
的所有实例,但未能找到由测试/应用程序设置它的位置。
我的问题是,只运行集成测试与运行整个测试套件有什么不同?我遇到过测试失败的情况,因为在之前的测试中没有调用 registerMetaClass
,但这种情况似乎有所不同,因为它是一个完整的套件。
最佳答案
这对我来说听起来像是测试污染。
我会尝试只运行一个单元测试和一个集成测试。如果失败,切换到不同的单元测试,看看它是否仍然失败。如果它只运行一个单元测试,那么它很可能是一个不好的单元测试,您可以开始通过集成测试分批运行它们,看看是什么导致了失败。
如果您的项目处于源代码控制之下,我会为此类事情做的另一件事是恢复到测试全部通过并确保它们仍然运行的已知良好版本。可能是您环境中的某些东西。如果它运行,请转到提示的一半进行修订并尝试。继续进行手动二进制搜索,直到缩小范围。
两者都是git和 mercurial have a built in feature called "bisect"这使您可以搜索导致失败的确切修订,而无需手动更新。如果您在另一个 RCS 上,它也可能有类似的东西。
关于unit-testing - Grails 集成测试仅在使用 'grails test-app' 运行时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525136/