【问题标题】:Grails 2.1.1 - Unit testing and Mocking the elements of domain classGrails 2.1.1 - 单元测试和模拟域类的元素
【发布时间】:2013-06-11 09:33:20
【问题描述】:

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

我的问题是- 我有一个名为employee 的域类 它有—— 字符串编号 字符串名字 字符串中间首字母 字符串姓氏 字符串状态 字符串 empType 字符串用户名

我想在测试类 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"
    }

如果我遗漏了什么或需要做一些修改,请告诉我。

在此先感谢 :) 艾米

【问题讨论】:

    标签: unit-testing grails grails-2.0


    【解决方案1】:

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

    【讨论】:

    • 谢谢 - 我已将它从我的域测试类和控制器测试类中删除...
    【解决方案2】:

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

    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

    【讨论】:

    • 它说编译错误:|编译 14 个源文件。 | Error Compilation error compile [unit] tests: startup failed: C:\Users\amar\Documents\NetBeansProjects\File\test\unit\EmployeeControllerTests.groovy: 39: unable to resolve class Employee @ line 39, column 17. def ce = new Employee(empNo: "001", firstname: "amy", .... ^ 1 错误
    • 是的,因为Employee 没有被导入。当我说几行代码时,我并不是说我可以跳过导入语句。 :)
    • 为此道歉,实际上我是 grails 的新手......我正在努力。感谢您的帮助,我很快就会回来:)
    • 嗨,我可以继续。我有所有类,包括 - 域,控制器,通用包下的单元测试作为“文件”。我已经改变了它,它现在可以工作了。
    • 我将所有类都放在同一个包下,现在它正在工作。但是我们可以将它们分成单独的每个域类,控制器类和服务类以及测试类。这会是正确的方法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多