如何在Spock中测试(单元测试)涉及渲染视图的方法?

时间:2015-09-03 05:46:22

标签: unit-testing grails spock

首先,我还没有尝试过JUnit或任何其他测试框架,所以我希望你能理解我提出这样的问题。

我是spock的新手(正如我已经提到的,我在测试框架中没有任何背景)并且我已经用grails创建了一个简单的应用程序。现在我想创建一个代码(单元测试)来测试我使用spock创建的应用程序(我希望你理解我的意思)。

我已经阅读了几篇关于spock的文章,但我仍然不清楚如何在我自己的应用程序中做到这一点。

class DailyProfitController {
     def update() {
        params.date_month = (Integer.parseInt(params.date_month)<10)? "0" + params.date_month : params.date_month
        params.date_day = (Integer.parseInt(params.date_day)<10)? "0" + params.date_day : params.date_day
        params.date = params.date_year + "-" + params.date_month + "-" + params.date_day
        def dailyProfit = new DailyProfit(params)
        dailyProfit.save(flush:true, insert:false)
        list()    
    }


def list(){
    def dailyProfit = DailyProfit.list()
    render view:"profitTable",  model: [dailyProfit : dailyProfit]
}

}

上面显示的是控制器和两个方法,更新和列表。假设我想使用spock为这个控制器创建单元测试代码,我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您对控制器进行单元测试,我会根据单元测试应该验证控制器是否在正确的参数中提供正确的数据来进行测试。

查看模拟视图(实质上,构造提供给视图的数据的字符串表示形式,并将其与控制器的响应文本进行比较。下面简单的简单示例:

setup:
def desired = "configurationId: 5, categoryId: 2"

when:
// have to escape the value insertion ${}
def mockView = "configurationId: \${configurationId}, categoryId: \${categoryId}"
// then substitute our stringification mockView for the real gsp
views['/generalSettings/_generalSettings.gsp'] = mockView

controller.index()

then:
response.text == desired