gpt4 book ai didi

unit-testing - 需要 Grails 单元测试帮助

转载 作者:行者123 更新时间:2023-12-04 05:31:56 27 4
gpt4 key购买 nike

我想测试调用服务的 Grails Controller 。我想 mock 这项服务。该服务有一个方法:

JobIF JobServiceIF.getJob(int)

JobIF 有一个方法:

String JobIF.getTitle()

这是我的 Controller

def workActivities = {   JobIF job = jobService.getJob(params.id)   [career:job]}

我知道我需要模拟服务和作业类(两者都有具体的实现),但我正在努力了解 Groovy 模拟对象语法。我如何模拟一份工作并将标题设置为“建筑师”,然后测试代码?

到目前为止我有:

void testWorkActivities() {   def controller = new CareersController()   ... // Mocking stuff I don't know how to do   controller.params.id = 12   def model = controller.workActivities()   assertEquals "Architect", model["career"].getTitle()}

最佳答案

基本上你有两个选择

  1. 使用 Groovy 模拟类,即 MockForStubFor
  2. 通过调用 GrailsUnitTestCasemockFor 方法来使用 Grails 模拟类。该方法返回的类是GrailsMock
  3. 的一个实例

就我个人而言,我发现 Groovy 模拟对象比 Grails 模拟对象更可靠。有时,我发现我的 Grails 模拟对象被绕过,即使我似乎已正确设置所有内容。

这是一个如何使用 Groovy 模拟的示例:

void testCreateSuccess() {

def controller = new CareersController()

// Create a mock for the JobService implementation class
def mockJobServiceFactory = new MockFor(JobService)

mockJobServiceFactory.demand.getJob {def id ->
// Return the instance of JobIF that is used when the mock is invoked
return new Job(title: "architect")
}

// Set the controller to use the mock service
controller.jobService = mockJobServiceFactory.proxyInstance()

// Do the test
controller.params.id = 12
def model = controller.workActivities()
assertEquals "Architect", model["career"].getTitle()
}

使用Grails mocks的过程基本相同,只是调用了测试类的mockFor方法,而不是实例化MockFor

关于unit-testing - 需要 Grails 单元测试帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com