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