grails - 如何在 Grails 中测试非 Controller /域/服务类..

标签 grails testing spock

我在sources/groovy 中定义了一个Groovy 助手类,我正在尝试使用Spock 进行测试。我尝试测试的类引用了org.springframework.validation.Errors,称为errors ..

我定义了一个测试,它调用下面显示的一些代码..

def validateSuppliedDocument() {

      // If we create one it's always valid  ..

      if (txn.transactionType.autoCreateDocument) {
          return true
      } else {

          txn.documentHeader =
                  DocumentHeader.findByDocumentReferenceCodeAndDocumentType(txn.documentReferenceCode, txn.transactionType.associatedDocumentType)

          if (!txn.documentHeader) {
              errors.rejectValue('documentReferenceCode', "document.not.found",
                      [txn.documentReferenceCode].toArray(), 'Document not found')
              return false
          }

我的问题是由 'errors.rejectValue' 语句引起的,因为错误实例为 null ..

我怎样才能让 grails 注入(inject)它只是为了测试目的,应该给什么类 Errors 是一个接口(interface)?

仅供引用,此方法作为字段验证器的一部分被调用(如果有帮助的话..)并且在生产中运行良好..

谢谢

最佳答案

您可以创建 mock对于 errors字段并简单地将其设置在您的助手类实例中(假设 errors 字段是公共(public)的)。它应该类似于:

import spock.lang.*
import org.springframework.validation.Errors

MyHelperClass myHelper = new MyHelperClass()
myHelper.errors = Mock(Errors)

关于grails - 如何在 Grails 中测试非 Controller /域/服务类..,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27568196/

相关文章:

java - 针对更多类型的数据库运行 JUnit 测试

grails - Grails 2.1.x依赖问题

grails - Grails如何将枚举映射到数据库上的现有枚举

testing - 如何跳过 Clojure Midje 测试

python - 测试 Django allauth

java - 具有命令和查询方法的对象应该是模拟的还是 stub 的?

unit-testing - 在 Spock 中模拟父类(super class)

session - Grails:为什么 session 无法正确保存我的 map 列表?

html - 如何在grails中将g:textArea的内容设置为HTML(格式化文本,而非代码)

debugging - Elixir pry session 因数据库连接超时而中断