Grails 2.1.1 - 单元测试和模拟域类的元素

时间:2013-06-11 09:33:21

标签: unit-testing grails grails-2.0

我需要一些帮助来为我的项目编写单元测试。 我已经为我的控制器和域创建了单元测试类。

我的问题是 - 我有一个名为employee的域类 它有 -     字符串ID     字符串名字     String middleInitial     字符串姓氏     字符串状态     字符串empType     字符串userid

我想在测试类EmployeeControllerTest()下的setUp()方法中模拟它们

我添加了以下Mixin

package EmployeeController

import static org.junit.Assert.*

import grails.test.mixin.*
import grails.test.mixin.support.*
import org.junit.*
import java.io.Serializable

import grails.test.mixin.TestFor
import grails.test.mixin.TestMixin
import grails.test.mixin.Mock
import grails.test.mixin.support.GrailsUnitTestMixin
import grails.test.mixin.domain.DomainClassUnitTestMixin
import grails.test.mixin.services.ServiceUnitTestMixin
import grails.test.mixin.web.ControllerUnitTestMixin
import grails.test.mixin.web.FiltersUnitTestMixin
import grails.test.mixin.web.GroovyPageUnitTestMixin
import grails.test.mixin.web.UrlMappingsUnitTestMixin
import grails.test.mixin.webflow.WebFlowUnitTestMixin

@TestMixin(GrailsUnitTestMixin)
@TestFor(EmployeeController)
@Mock([Employee])

class EmployeeControllerTests {

    void setUp() {
        // Setup logic here

       def Employee ce = new Employee()
       ce.put(empNo: "001", firstname: "amy", middleInitial: "ratr", lastname: "suz", status: "A", empType: "vendor", userid: "amar")
    }

    void tearDown() {
        // Tear down logic here
    }

    void testSomething() {
        //fail "Implement me"
    }

请告诉我,如果我遗漏某些东西或需要做些修改。

先谢谢:) 艾米

2 个答案:

答案 0 :(得分:4)

你不应该将@TestMixin@TestFor一起使用,因为TestMixin来自grails 1.3中的旧单元测试 - 我建议删除它

答案 1 :(得分:1)

您的单元测试用例可以简化为几行代码:

package EmployeeController
import org.junit.*

import grails.test.mixin.TestFor
import grails.test.mixin.Mock

@TestFor(EmployeeController)
@Mock(Employee)
class EmployeeControllerTests {
    void setUp() {
       def ce =   
                new Employee(empNo: "001", firstname: "amy", 
                             middleInitial: "ratr", lastname: "suz", 
                             status: "A", empType: "vendor", 
                             userid: "amar").save(flush: true)
    }
}

@TestFor mixin处理控制器模拟。您可以在此处访问某些关键字,例如controllercontoller.paramscontroller.requestcontroller.response,而无需实例化控制器。

@Mock负责模拟域类Employee