域类(gorm)的Grails单元测试

| 开始使用grails进行游戏,我想评估GORM,因此我使用Spring Tool Suite创建了一个域类:
Client
带有
name
vatNumber
regNumber
,并且测试类是自动创建的。 我添加的单元测试代码是:
package pilot1

import grails.test.*

class ClientTests extends GrailsUnitTestCase {
    protected void setUp() {
        super.setUp()
    }

    protected void tearDown() {
        super.tearDown()
    }

    void testSomething() {
        def instances = []
        def myTestDomain = mockDomain(Client, instances)
        def client = new Client(name:\"Test\",vatNumber:\"323\",regNumber:\"343\")
        client.id =1;
        assertEquals client.name, \"Test\"
        client.save();
        def res = Client.findByName(\"Test\")
        println instances
        println res
        //assertEquals 1, instances.size()
    }
}
结果为[],并且为空!我做错了什么? 另外,我还希望在后台看到GORM(休眠)生成的SQL。知道我将如何在Grails中这样做吗?     
已邀请:
        不要这样做:client.id = 1; save()将提供一个ID。 您可能需要保存(flush:true)。 只需保存并使用,然后使用ID即可获取。 然后进行测试。 该链接可能有用:http://blog.springsource.com/2011/06/07/countdown-to-grails-1-4-unit-testing/     
        http://www.ibm.com/developerworks/java/library/j-grails10148/index.html \“正如我前面提到的,Grails支持两种基本的测试类型:单元测试和集成测试。两者之间在语法上没有区别-两者都使用相同的断言编写为GroovyTestCase。区别在于语义。单元测试旨在单独测试类,而集成测试则允许您在完整的运行环境中测试类。 坦率地说,如果您要将所有Grails测试都编写为集成测试,那对我来说就很好。所有的Grails create- *命令都会生成相应的集成测试,因此大多数人只是简单地使用已有的集成测试。您很快就会看到,您要测试的大多数内容无论如何都需要完整的环境并可以运行,因此集成测试是一个很好的默认设置。\“     
        首先,您不应该评估GORM本身。提供Grails的人员负责测试GORM。当然,您可能根本不是那个意思。 其次,测试findBy *()通常不是单元测试所关心的。如果确实需要测试findBy *(),则需要收集所有findBy *()响应实例,并将该列表作为第二个参数传递给mockDomain()。您在示例中使用了不正确的嘲讽(mockDomain())-必须告诉嘲讽(mockDomain())要模拟哪些实例,以便在findBy *()调用中将其接收回来。     
        保存客户端可能会失败,而不会引发异常,这将解释为什么res为null。请尝试下面的以下代码,以便您查看保存客户端的原因以及失败的原因。
client.save()
if(client.hasErrors()){
// Saving failed, look in client.errors to see the specific reason
}
    

要回复问题请先登录注册