Groovy-grails模拟问题。无法模拟

时间:2012-08-23 14:22:56

标签: unit-testing grails groovy junit mocking

我的grails porject中有一个服务类方法,它使用一个帮助器类来获取响应为xml。然后将xml作为服务类方法的响应发送出去。

服务类: -

class ItemService{
def getItem(Number) {
        def HelperClass helper = new HelperClass()
        def responseXml = helper.getMessage(Number)                 
        return responseXml
    }
}

我为这个方法编写了一个测试用例。在我的测试用例中,我想模仿

    def responseXml = helper.getMessage(Number) 

我到目前为止写的测试用例是:

class ItemServiceTest extends GroovyTestCase {
public final void testFindItem(){
        def service = new ItemService()

        def xml = "<Item><Number>123</Number></Item>"

        def mockJobServiceFactory = new MockFor(HelperClass)
        mockJobServiceFactory.demand.getMessage{ def str ->
            return xml
        }
        service.getItem().HelperClass =  mockJobServiceFactory.proxyInstance()

        def item = service.getItem()("123")
        assertNotNull(item)
    }

但是,模拟不会返回我在测试用例中指定的xml。 您在上述方法中遇到的任何问题?...提前谢谢

1 个答案:

答案 0 :(得分:2)

使用MockFor模拟对象时,需要在use闭包中包围使用模拟的代码。试试这个:

def service = new ItemService()

def xml = "<Item><Number>123</Number></Item>"

def mockJobServiceFactory = new MockFor(HelperClass)
mockJobServiceFactory.demand.getMessage{ def str ->
    return xml
}

mockJobServiceFactory.use {
    def item = service.getItem()("123")
    assertNotNull(item)
}