我正在为使用Grails 2.3.5创建的大型Web应用程序编写回归测试。单元测试使用spock框架,集成测试使用JUnit框架编写,功能测试使用spock和geb. DbUnit与集成和功能测试一起使用,以提供一个简单的数据库进行测试。调用时所有测试都运行良好:
grails test-app unit:
grails test-app functional:
grails test-app unit: functional:
grails test-app integration: functional:
grails test-app unit: aUnitTest integration: aTestController functional:
但是当我打电话时:
grails test-app
grails test-app unit: integration: functional:
功能测试因此错误而失败:
junit.framework.AssertionFailedError: Condition not satisfied:
driver.currentUrl == urlPrefix + "/login"
| | | | |
| | | | http://localhost:8099/FOOBAR/login
| | | http://localhost:8099/FOOBAR
| | false
| | 19 differences (75% similarity)
| | http://localhost:8099/(GrailsUnitTestMixin)/login
| | http://localhost:8099/(FOOBAR)/login
| http://localhost:8099/GrailsUnitTestMixin/login
FirefoxDriver: firefox on XP (c9e919fe-1046-488a-af0f-25e9a572db3b)
at MySpec.Login with username and invalid password(MySpec.groovy:31)
如您所见,基本URL更改导致测试失败。什么可能导致这个?关于从哪里开始寻找的任何想法?内存数据库当前设置为create-drop,因此应该在单元,集成和功能测试之间进行清除。 DbUnit在Bootstrap.groovy中连接,它在应用程序运行之前和之后启动并断开。非常感谢任何有助于追踪此问题的帮助。
这些文章是我能找到的最接近我的问题的文章:
grails "test-app" fails for functional geb+spock test but "test-app -functional" is successfull
答案 0 :(得分:1)
这里的测试阶段肯定存在一些全球状态。我唯一的建议是观察上下文路径在哪一点变为包括GrailsUnitTextMixin
。是你点击一个链接?或者你被重定向到那个网址?在调试模式下运行测试并尝试跟踪它。
将上下文设置为在单元测试中使用@TestFor
时使用的类的名称这一事实表明在单元测试阶段会设置或修改某些全局/静态变量,但是您说如果你一起运行单元测试和功能测试,你就不会观察到这种行为,只有当你同时运行所有三个测试阶段时才能得到它......