在Grails中测试RESTful服务的方法是什么?

在Grails中测试RESTful服务的方法是什么?,rest,grails,plugins,tdd,bdd,Rest,Grails,Plugins,Tdd,Bdd,我对Grails并不陌生,但我对它也不是很熟悉。我边走边学。我注意到的一点是,尽管Grails提供了对TDD/BDD的内置支持,但它缺乏关于TDD/BDD的重要文档。特别是,官方指南的其余部分没有说明如何测试RESTful服务 我目前正在尝试使用使用创建的函数测试来测试我的代码。由于我在尝试通过GORM方法访问数据源时遇到了IllegalStateException,并且将@Mock添加到域类中并没有改变任何东西,因此我必须寻找解决方法。从我的网络搜索中,我发现可以用它。然而,在使用插件运行代码

我对Grails并不陌生,但我对它也不是很熟悉。我边走边学。我注意到的一点是,尽管Grails提供了对TDD/BDD的内置支持,但它缺乏关于TDD/BDD的重要文档。特别是,官方指南的其余部分没有说明如何测试RESTful服务

我目前正在尝试使用使用创建的函数测试来测试我的代码。由于我在尝试通过GORM方法访问数据源时遇到了
IllegalStateException
,并且将
@Mock
添加到域类中并没有改变任何东西,因此我必须寻找解决方法。从我的网络搜索中,我发现可以用它。然而,在使用插件运行代码时,我再次遇到了
InvalidClassException

所以我的测试逻辑是这样的

  • 点击数据源;检查是否没有记录
  • 向服务发出
    POST
    请求以创建记录
  • 再次点击数据源以检查记录是否已创建
  • 下面是使用步骤(1)的
    RemoteControlPlugin
    组件的示例代码

    为此我得到了

    | 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)
    

    我也有这个错误,下面是我的一个域类的外观:

    class Friend extends User implements Serializable {
    
        private static final long serialVersionUID = 5127248463279511859L
    
    我相信我使用了IDE来生成long。有关解释,请参阅

    此外,我在非分叉模式下运行功能测试。这可能会影响远程控制插件。我之前没想到

    grails.project.fork = [
        test: false,
    

    我推荐功能测试使用。几个月来,我一直在使用它和远程控制插件。这个版本非常好,支持也非常出色。您使用的是什么版本的Grails?正如我所说,我在
    远程控制插件
    .2.3.x和2.4.0上遇到了问题。这适用于我:def remote=new RemoteControl();def user=remote{user.get(1)}我使用的是2.3.9。我不知道为什么会出现
    InvalidClassException
    说“本地类不兼容”。我不记得看到过那个错误,但我从2.3.7升级到了2.4.0。你在使用最新的遥控插件吗?它是不久前更新的。您是如何为Groovy类生成
    serialVersionUID
    的?我使用的是Eclipse,但如果我在Groovy类上工作,它不会警告我。我在使用Intellij时,没有必要使用Eclipse。我只是发明了一个,并尝试一下。我尝试使用1234567作为UID,但仍然得到相同的错误。我认为这还不够长。试试我上面例子中的一个。考虑到1L通常就足够了,我认为这不会改变任何事情。。。
    grails.project.fork = [
        test: false,