GrailsMock域名findByUuid静态方法GORM

时间:2013-10-22 18:37:50

标签: unit-testing grails grails-domain-class

单元测试......无法解决这个问题.. 我正在使用2.1.1,我如何获得模拟域静态方法.findByUuid是否有.findBy的特殊语法???

Controller中的

代码具有名为MessageBus ...的域类:

        log.debug("uuidStatus? = "+ uuidStatus)
        def messageBus = MessageBus.findByUuid(uuidStatus)  
        log.debug("messageBus is valid? = "+ messageBus)

如何模拟domainClass.findByUuid

我在ControllerTests中试过这个:

    mockControl.demand.static.findByUuid() { uuidStatus -> 
        MessageBus mb = new MessageBus()
        mb.uuid="dce9d1bf-f3c2-4876-af68-6c9d272cf374"
        println("uuid = " +mb.uuid)
        return mb
        }

错误:

  

控制器uuidStatus? = dce9d1bf-f3c2-4876-af68-6c9d272cf374   core.DatastoreUtils无法取消绑定会话,没有注册SessionHolder   |失败:testStatus(ControllerTests)   | junit.framework.AssertionFailedError:此时不会调用'findByUuid'。仍然有1次调用'getAsMap'预期。       at grails.test.MockClosureProxy.doBeforeCall(MockClosureProxy.java:66)       at grails.test.AbstractClosureProxy.call(AbstractClosureProxy.java:74)       在Controller.status(CommentsController.groovy:84)       在ControllerTests.testStatus(ControllerTests.groovy:225)

我有这个工作,但我不知道为什么。所以我建立了新的包装和简单的Book& LibraryController想要测试方法状态。首先,当我构建简单项目时,我收到了相同的错误消息 !!然后经过一段时间的烦恼,它开始工作,似乎修改了模型的需求.static.find()* 更改它的名称并再次更改它是修复。奇怪。 IDK,但是我必须继续前进,如果其他人看到这可能是版本2.1.1的奇怪之处。

package testbook
class Book {
String name
String uuid 
static constraints = {
    uuid(unique: true)
}
}

图书馆管制员:      包测试手册      class LibraryController {     def status(){         String uuid = params?.uuid         log.debug(的 “uuid =” + UUID)
        def myBook = Book.findByUuid(uuid)         log.debug( “myBook.toString()=” + myBook.toString())         如果(myBook){             // 做一点事             log.debug(“做某事!!!”)         }
        渲染myBook     }

ControllerTests:

package testbook
import grails.test.GrailsMock
import grails.test.mixin.*
import org.junit.*

@TestFor(LibraryController)
@Mock([Book])
class LibraryControllerTests {
 void testStatus() {
    def mockcontrol = new GrailsMock(Book)

    mockcontrol.demand.static.findByUuid(){uuid ->
        Book bookFound = new Book()
        bookFound.id = 1  // IMPORTANT for default .toString()
        bookFound.name = "Alice in Wonderland"
        bookFound.uuid = uuid
        println("bookFound=" + bookFound)
        return  bookFound //this returns null object
        }

    params.uuid="12356"
    Map model = controller.status()
    println("model" + model )// this is null
}

}

因此原始错误因某种原因而消失。但我仍然得到一个返回的null对象。

模型仍返回null。             Map model = controller.status()//为模型返回null。

为什么模拟域名呈现为“null”的任何解释?

0 个答案:

没有答案