1

单元测试......无法弄清楚......我正在使用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”。在 grails.test.MockClosureProxy.doBeforeCall(MockClosureProxy.java:66) 在 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)
}
}

库控制器: package testbook class LibraryController { def status(){ String uuid = params?.uuid log.debug("uuid="+uuid)
def myBook = Book.findByUuid(uuid) log.debug("myBook.toString() ="+myBook.toString()) if(myBook){ // 做某事 log.debug("做某事!!!") }
渲染 myBook }

控制器测试:

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 形式返回。Map model = controller.status() // 为模型返回 null。

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

4

0 回答 0