我不是Grails的新手,但我对它也不是很熟悉。我几乎要去学习。我注意到的一件事是,虽然Grails提供了对TDD / BDD的内置支持,但它缺乏关于它的重要文档。特别是,官方指南的REST部分没有说明如何测试RESTful服务。
我目前正在尝试使用Functional Testing Plugin创建的功能测试来测试我的代码。由于我在尝试通过GORM方法访问数据源时得到IllegalStateException
,并且向域类添加@Mock
并未改变任何内容,因此我不得不寻找解决方法。从我的网络搜索中,我发现可以使用Remote Control Plugin。但是,再一次,我在使用插件运行代码时得到InvalidClassException
。
所以我的测试逻辑就像,
POST
请求以创建记录。以下是步骤(1)中使用RemoteControlPlugin
组件的示例代码。
def recordCount = remote {
//Position is a domain class
Position.count
}
assertEquals 0, recordCount
我得到了,
| Failure: testCreatePosition(PositionFunctionalTests)
| groovyx.remote.client.RemoteException: An exception was raised in the remote application
at groovyx.remote.client.RemoteControl.processResult(RemoteControl.groovy:129)
at groovyx.remote.client.RemoteControl.exec(RemoteControl.groovy:73)
at groovyx.remote.client.RemoteControl.exec(RemoteControl.groovy:67)
at groovyx.remote.client.RemoteControl.call(RemoteControl.groovy:81)
at PositionFunctionalTests.testCreatePosition(PositionFunctionalTests.groovy:21)
at junit.framework.TestCase.runTest(TestCase.java:176)
at junit.framework.TestCase.runBare(TestCase.java:141)
at junit.framework.TestResult$1.protect(TestResult.java:122)
at junit.framework.TestResult.runProtected(TestResult.java:142)
at junit.framework.TestResult.run(TestResult.java:125)
at junit.framework.TestCase.run(TestCase.java:129)
at junit.framework.TestSuite.runTest(TestSuite.java:255)
at junit.framework.TestSuite.run(TestSuite.java:250)
Caused by: java.io.InvalidClassException: PositionFunctionalTests$_testCreatePosition_closure1; local class incompatible: stream classdesc serialVersionUID = 9199922008348880909, local class serialVersionUID = -8935356421602488910
at groovyx.remote.server.CommandInvoker.instantiate(CommandInvoker.groovy:61)
at groovyx.remote.server.CommandInvoker.invokeAgainst(CommandInvoker.groovy:37)
at groovyx.remote.server.CommandChainInvoker.invokeAgainst(CommandChainInvoker.groovy:37)
at groovyx.remote.server.Receiver.invokeCommandChain(Receiver.groovy:129)
at groovyx.remote.server.Receiver.execute(Receiver.groovy:125)
at groovyx.remote.transport.http.RemoteControlServlet.doExecute(RemoteControlServlet.groovy:74)
at grails.plugin.remotecontrol.RemoteControlServlet.doExecute(RemoteControlServlet.groovy:30)
at groovyx.remote.transport.http.RemoteControlServlet.doPost(RemoteControlServlet.groovy:39)
答案 0 :(得分:0)
我也遇到了这个错误,以及我的某个域类看起来如何:
class Friend extends User implements Serializable {
private static final long serialVersionUID = 5127248463279511859L
我相信我使用IDE来生成long。有关说明,请参阅here。
另外,我在非分叉模式下运行我的功能测试。这可能会影响远程控制插件。我之前没有想到这一点。
grails.project.fork = [
test: false,