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

标签 unit-testing grails groovy junit mocking

我的 grails 项目中有一个服务类方法,它使用辅助类来获取 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。 您在上述方法中发现任何问题吗?...提前致谢

最佳答案

当您使用 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)
}

关于unit-testing - Groovy-grails 模拟问题。无法模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12093862/

相关文章:

pdf - grails g:在gsp页面中设置为空值

java - 在什么情况下选择 Katalon 而不是 Selenium?

grails - g :paginate unknown tag in Grails 2. 4.4

groovy - 如何在 groovy 动态参数上获取作业名称?

unit-testing - 如何使用 token 对帖子(web-api)调用进行单元测试?

.net - 使 NUnit 在第一次失败时不停止

unit-testing - 编写单元测试时要测试什么?

Python单元测试: Mimic a command line argument for test purposes

grails - grails 2.4.0 上的 Assets 标签

grails - 如何使用可搜索插件防止应用程序范围内的搜索?