GRAILS 2.4.4:如何只运行单元测试,或者如何修复生成的集成测试?

GRAILS 2.4.4: how to run unit tests only, or how to fix the generated integration tests?

对于 grails 2.4,当您创建一个控制器时,它会创建一个单元测试 class 例如:

@TestFor(SessionService)
class SessionServiceSpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
    }
}

因此您创建了 20 个控制器,并获得 20 个测试 classes。

当您尝试运行 grails test-app 时,它失败并出现以下错误:

java.lang.Exception: 
No tests found matching grails test target pattern filter from org.junit.runner.Request

它永远无法运行我们的集成测试。

因此,Grails 为您创建的测试并非开箱即用。

我们可以删除所有已创建的测试规范 classes,但是如果我们想编写它们,我们有点希望它们准备就绪。

  1. 有没有办法运行我们的集成测试,而不运行单元测试(已损坏)或:
  2. 有没有办法修复测试,以免他们摔倒?有人发布了添加一个有效的 when/then,但我们不知道该放什么,因为我们尝试过的仍然会产生相同的异常。

遗憾的是 Grails 没有告诉您哪些测试或 class 抛出了这个异常。

我觉得这个论点很奇怪。当您创建控制器时,默认情况下会根据模板为其创建单位规范,您可以根据需要轻松定制该模板。

grails install-templates

为你做。现在回答你的问题:

  1. 是的,有一种方法可以只进行 运行 集成测试。

    grails test-app integration:

  2. 使用 install-templates 后,将 src\templates\testing 下的 Controller.groovy 模板修改为

喜欢:

@artifact.package@import grails.test.mixin.TestFor
import spock.lang.Specification

/**
 * See the API for {@link grails.test.mixin.web.ControllerUnitTestMixin} 
 * for usage instructions
 */
@TestFor(@artifact.testclass@)
class @artifact.name@ extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
        expect: 
        1 == 1
    }
}

当 运行 时,这不会使您的测试失败,但它会破坏

的全部目的

writing failing test -> modify code -> fixing test approach

测试驱动开发。我宁愿实施一个失败的测试,然后在控制器中编写最少的逻辑来通过测试。