grails - 如何通过模拟对象并期望一些预期结果来编写Spock单元测试

标签 grails groovy junit spock

我正在尝试编写单元测试以添加2个数字,这正调用Service类add method(),还有一个类Adder()从add()方法调用

在单元测试用例中,我的预期结果与单元测试类中的硬编码不同,如何解决此问题。我在代码中做错了吗?

单元测试课-

class ControllerTest extends Specification {

Service src
HelperAdd hd

def setup() {
    hd = Mock()

    src = new Service(
            hd: hd
    )
}

    def "Add 2 numbers"() {
        AddModel request = new AddModel()

    given: "input"
    request.setA(2)
    request.setB(3)
    when:
    src.add(request)
    then:
    1 * hd.add(_) >> 2
    expect:"4"
    }
}


Service class --

class Service {

    @Autowired
    HelperAdd hd

    @PostMapping(value="/getdocuments")
    def add(@RequestBody AddModel request) {
        int a = request.a
        int b = request.b
        int d = hd.add(a)
        int c = a+d
        return c
    }
}


HelperAdd class--

class HelperAdd {

    def add(int a)
    {
        int k = a+4
        return k
    }

}

Model class --

@Canonical
class AddModel {

    int a
    int b

}

最佳答案

我不明白你的问题。测试通过。但是,您的测试语法很奇怪。这个怎么样?

def "Add 2 numbers"() {
  given: "input"
  def request = new AddModel(a: 2, b: 3)
  when:
  def result = src.add(request)
  then:
  1 * hd.add(_) >> 2
  result == 4
}

关于grails - 如何通过模拟对象并期望一些预期结果来编写Spock单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255568/

相关文章:

java - 如何判断当前 tx (Hibernate) 中是否删除了 Grails/GORM 域实例?

date - UTC 的 Groovy 日期格式,以毫秒为单位

java - junit4 中未找到测试

java - 使用 ANT、Javacc、JUnit 和编译 Java 类加快 Linux 构建时间的技巧

junit - 在 JUnit 5 中将 `Supplier` 作为消息提供者传递的选项的实际用途

hibernate - Grails GORM嵌套的多对多关系查询

c# - 如何使用curl对Web服务进行身份验证?

optimization - 我的Grails应用程序在启动时使用200 MB以上的内存是否正常?

Groovy 脚本的 Eclipse RCP 独立导出问题

grails - GORM - 将子项添加到父项并保存给出 groovy.lang.MissingMethodException