Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何编写此控制器方法的单元测试?_Unit Testing_Grails_Testing - Fatal编程技术网

Unit testing 如何编写此控制器方法的单元测试?

Unit testing 如何编写此控制器方法的单元测试?,unit-testing,grails,testing,Unit Testing,Grails,Testing,我试图学习grails单元测试,我有一个方法 def getProductList(){ List<Product> products = productService.getSodaProductList(); render(view:"productList",model:[products:products]) } 但是不起作用,有人能建议如何编写此测试函数吗?我通常使用以下方法进行单元测试 使用spock: import grails.test.mixin.

我试图学习grails单元测试,我有一个方法

def getProductList(){
    List<Product> products = productService.getSodaProductList();
    render(view:"productList",model:[products:products])
}

但是不起作用,有人能建议如何编写此测试函数吗?

我通常使用以下方法进行单元测试

使用spock:

import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(SodaProductController)
@Mock([SodaProduct, ProductService])
class SodaProductControllerSpec extends Specification {

  void testGetSodaProductList() {
    when:
    SodaProduct sodaProduct = 
           new SodaProduct(productName: "Test Product", 
                           productDesc: "Desc", price: 10.0)
    controller.getProductList()

    then:
    view == "/sodaProduct/productList"
    model.products.size() == 2
  }
}
import grails.test.mixin.Mock
import grails.test.mixin.TestFor

@TestFor(SodaProductController)
@Mock([SodaProduct, ProductService])
class SodaProductControllerTests {

  void testGetSodaProductList() {
    SodaProduct sodaProduct = 
          new SodaProduct(productName: "Test Product", 
                          productDesc: "Desc", price: 10.0)

    controller.getProductList()

    assert view == "/sodaProduct/productList"
    assert model.products.size() == 2
  }
}
无spock:

import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(SodaProductController)
@Mock([SodaProduct, ProductService])
class SodaProductControllerSpec extends Specification {

  void testGetSodaProductList() {
    when:
    SodaProduct sodaProduct = 
           new SodaProduct(productName: "Test Product", 
                           productDesc: "Desc", price: 10.0)
    controller.getProductList()

    then:
    view == "/sodaProduct/productList"
    model.products.size() == 2
  }
}
import grails.test.mixin.Mock
import grails.test.mixin.TestFor

@TestFor(SodaProductController)
@Mock([SodaProduct, ProductService])
class SodaProductControllerTests {

  void testGetSodaProductList() {
    SodaProduct sodaProduct = 
          new SodaProduct(productName: "Test Product", 
                          productDesc: "Desc", price: 10.0)

    controller.getProductList()

    assert view == "/sodaProduct/productList"
    assert model.products.size() == 2
  }
}

对于规范,我们需要安装一些插件,对吗?您的grails版本是什么?我的是2.0.3,这是一个问题我正在使用grails 2.3.5,它包括spock。我认为斯波克包含在2.3.x中。所以,是的,你需要安装插件。没有spock,就不会有给定的、何时、然后的块。:)