Grails 4.0.3在数据库中保存实体时的单元测试问题



我首先开始对我的文件管理器api进行单元测试,创建了一个测试方法,试图从不存在的所有者(部分(中删除文件,如下所示。

void "Deleting a file from a non existent part" (){
when:
request.method = 'DELETE'
request.setParameter("partId","1234567891011")
request.setParameter("fileId","65465654546654654")
controller.deleteMetafiles()
then:
response.status == 404
response.json.message == "Part not found."
//println(response.getJson())
}

上面的代码按预期工作。

现在我想在内存数据库中插入一个元文件来删除它。但这是不可能的。

void "Deleting a valid file from an existent part" (){
given:
new Metafile(id: '1111111111', filename: 'test.pdf', title: '',
description: '', uploadedOn: new Date(),
partId: '2222222222', uploadedBy: 'Alfred', userId: '333333333').save()
when:
setupSpec()
request.method = 'DELETE'
request.setParameter("partId","2222222222")
request.setParameter("fileId","1111111111")
def model = controller.deleteMetafiles()
then:
response.status == 200

println("response status")
println(response.status)
println("response status")
}

有人能解释一下我在哪里犯的错吗?响应为404(找不到零件(。第一次单元测试的响应相同。但在第二次测试中,我在给定的部分创建了一个元文件。

谢谢!

Alfredo

下面是我的全部源代码。

package br.gov.cmb.cmbarq.tests
import br.gov.cmb.cmbarq.controllers.v1.MetafileController
import br.gov.cmb.cmbarq.domain.Metafile
import grails.testing.web.controllers.ControllerUnitTest
import spock.lang.Specification
import grails.testing.gorm.DataTest
class MetafileControllerSpec extends Specification implements ControllerUnitTest<MetafileController>, DataTest{
def setupSpec() {
}
def cleanup() {
}
void "Getting the amount of files from a non existent part"() {
when:
request.method = 'GET'
request.setParameter("partId","1234567891011")
controller.getMetafilesAmount()
then:
response.status == 404
}
void "Listing files of an non existent part"() {
when:
request.method = 'GET'
request.setParameter("partId","1234567891011")
controller.listMetafiles()
then:
response.status == 404
}
void "Deleting a file from a non existent part" (){
when:
request.method = 'DELETE'
request.setParameter("partId","1234567891011")
request.setParameter("fileId","65465654546654654")
controller.deleteMetafiles()
then:
response.status == 404
response.json.message == "Part not found."
//println(response.getJson())
}

void "Deleting a valid file from an existent part" (){
given:
List <Metafile> sampleMetafiles = [new Metafile(id: '1111111111', filename: 'test.pdf', title: '',
description: '', uploadedOn: new Date(),
partId: '2222222222', uploadedBy: 'Alfred', userId: '333333333'),
new Metafile(id: '1111111112', filename: 'test2.pdf', title: '',
description: '', uploadedOn: new Date(),
partId: '2222222221', uploadedBy: 'Alfred', userId: '333333334')
]

when:
request.method = 'DELETE'
request.setParameter("partId","2222222222")
request.setParameter("fileId","1111111111")
controller.deleteMetafiles()
then:
println(model.size())
model.size() == 1

}   
}

我的ws没有服务。由于其简单性,只有控制器和域。

我试图创建一个服务e,并将服务与控制器解耦。

在我的单元测试中,我将服务实例化为Stub,它按预期工作。

如果我有进一步的问题,我会继续这样做,并在这里发布任何问题。

谢谢。

最新更新