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