如何为这种控制器方法编写单元测试?

时间:2014-06-15 11:41:10

标签: unit-testing grails testing

我尝试学习grails单元测试,我有一个像

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

我想使用GrailsUnitTestCase

为此编写测试函数

我试过这个

void testGetSodaProductList(){
        def sodaProduct = new SodaProduct(productName:"Test Product",productDesc: "",price:10.0);
        mockDomain(SodaProduct,[sodaProduct])
        def controller = new SodaProductController();
        mockController(controller)
        def list = controller.getSodaProductList();
        assertEquals(2,list.model.products.size())
    }

但是没有工作,有人可以建议如何编写这个测试函数吗?

1 个答案:

答案 0 :(得分:1)

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

使用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
  }
}

没有spock:

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
  }
}