2012-02-12 36 views
1

有趣的是,這裏是groovy和grails中的新功能。我試圖運行grails install-templates,看到產生test.groovy它看起來像這樣...如何在grails測試中填充有效的參數

`<%=packageName ? "package ${packageName}\n\n" : ''%> 

import org.junit.* 
import grails.test.mixin.* 

@TestFor(${className}Controller) 
@Mock(${className}) 
class ${className}ControllerTests { 


    def populateValidParams(params) { 
     assert params != null 
     // TODO: Populate valid properties like... 
     //params["name"] = 'someValidName' 
    } 

    void testIndex() { 
     controller.index() 
     assert "/$propertyName/list" == response.redirectedUrl 
    } 

    void testList() { 

     def model = controller.list() 

     assert model.${propertyName}InstanceList.size() == 0 
     assert model.${propertyName}InstanceTotal == 0 
    } 

    void testCreate() { 
     def model = controller.create() 

     assert model.${propertyName}Instance != null 
    } 

    void testSave() { 
     controller.save() 

     assert model.${propertyName}Instance != null 
     assert view == '/${propertyName}/create' 

     response.reset() 

     populateValidParams(params) 
     controller.save() 

     assert response.redirectedUrl == '/${propertyName}/show/1' 
     assert controller.flash.message != null 
     assert ${className}.count() == 1 
    } 

    void testShow() { 
     controller.show() 

     assert flash.message != null 
     assert response.redirectedUrl == '/${propertyName}/list' 


     populateValidParams(params) 
     def ${propertyName} = new ${className}(params) 

     assert ${propertyName}.save() != null 

     params.id = ${propertyName}.id 

     def model = controller.show() 

     assert model.${propertyName}Instance == ${propertyName} 
    } 

    void testEdit() { 
     controller.edit() 

     assert flash.message != null 
     assert response.redirectedUrl == '/${propertyName}/list' 


     populateValidParams(params) 
     def ${propertyName} = new ${className}(params) 

     assert ${propertyName}.save() != null 

     params.id = ${propertyName}.id 

     def model = controller.edit() 

     assert model.${propertyName}Instance == ${propertyName} 
    } 

    void testUpdate() { 
     controller.update() 

     assert flash.message != null 
     assert response.redirectedUrl == '/${propertyName}/list' 

     response.reset() 


     populateValidParams(params) 
     def ${propertyName} = new ${className}(params) 

     assert ${propertyName}.save() != null 

     // test invalid parameters in update 
     params.id = ${propertyName}.id 
     //TODO: add invalid values to params object 

     controller.update() 

     assert view == "/${propertyName}/edit" 
     assert model.${propertyName}Instance != null 

     ${propertyName}.clearErrors() 

     populateValidParams(params) 
     controller.update() 

     assert response.redirectedUrl == "/${propertyName}/show/\$${propertyName}.id" 
     assert flash.message != null 

     //test outdated version number 
     response.reset() 
     ${propertyName}.clearErrors() 

     populateValidParams(params) 
     params.id = ${propertyName}.id 
     params.version = -1 
     controller.update() 

     assert view == "/${propertyName}/edit" 
     assert model.${propertyName}Instance != null 
     assert model.${propertyName}Instance.errors.getFieldError('version') 
     assert flash.message != null 
    } 

    void testDelete() { 
     controller.delete() 
     assert flash.message != null 
     assert response.redirectedUrl == '/${propertyName}/list' 

     response.reset() 

     populateValidParams(params) 
     def ${propertyName} = new ${className}(params) 

     assert ${propertyName}.save() != null 
     assert ${className}.count() == 1 

     params.id = ${propertyName}.id 

     controller.delete() 

     assert ${className}.count() == 0 
     assert ${className}.get(${propertyName}.id) == null 
     assert response.redirectedUrl == '/${propertyName}/list' 
    } 
}` 

所以我把它複製到相應的控制器測試,並改變了所有的$ {propertyName的}和$ {}的className這樣。 testIndex()testList()和testCreate()傳遞,但testSave(),testUpdate(),testDelete()和testEdit()失敗。我想,我需要填寫此部分:

def populateValidParams(params) { 
     assert params != null 
     // TODO: Populate valid properties like... 
     //params["name"] = 'someValidName' 
    } 

所以我沒有和方法如下:

def populateValidParams(params) { 
    assert params != null 
    // TODO: Populate valid properties like... 
    //params["name"] = 'someValidName' 

    params["company"] = 'someCompany' 
    params["position"] = 'somePosition' 
    params["responsibilities"] = 'someResponsibility' 
    params["startDate"] = new Date ('2007/01/01') 
    params["endDate"] = new Date ('2010/01/01') 

} 

,但仍是測試失敗..難道我做錯了什麼?我覺得我做錯了與PARAMS ..我有點不熟悉那種常規型的.. 這是堆棧跟蹤保存

junit.framework.AssertionFailedError: Assertion failed: 

assert response.redirectedUrl == '/employmentHistory/show/1' 
     |  |    | 
     |  null   false 
     org.codeh[email protected]737611 

    at com.someapp.controller.EmploymentHistoryControllerTests.testSave(EmploymentHistoryControllerTests.groovy:63) 

作秀:

junit.framework.AssertionFailedError: Assertion failed: 

assert employmentHistory.save() != null 
     |     |  | 
     |     null false 
     com.someapp.domain.EmploymentHistory : null 

    at com.someapp.controller.EmploymentHistoryControllerTests.testShow(EmploymentHistoryControllerTests.groovy:78) 

爲編輯:

junit.framework.AssertionFailedError: Assertion failed: 

assert employmentHistory.save() != null 
     |     |  | 
     |     null false 
     com.someapp.domain.EmploymentHistory : null 

    at com.someapp.controller.EmploymentHistoryControllerTests.testEdit(EmploymentHistoryControllerTests.groovy:97) 
+3

你說 「>因此,我將它複製到適當的控制器測試,並更改了所有$ {propertyName}和$ {className}。」 當您使用內部grails命令時,Grails將使用這些模板來生成您的控制器,測試,域等。你不需要手動替換它們。你可以說創建單元測試或創建整合測試和你的班級的名稱 – Alidad 2012-02-13 20:24:04

回答

1

assert employmentHistory.save() != null的失敗表明你EmploymentHistory域對象沒有驗證。確保您的參數符合您爲EmploymentHistory聲明的所有限制條件。

相關問題