【问题标题】:Can I run a single unit test from the command line for a Grails project?我可以从命令行为 Grails 项目运行单个单元测试吗?
【发布时间】:2011-04-10 11:09:55
【问题描述】:

我一直在通过键入 grails test-app :unit 运行我的 Grails 单元测试,它会运行所有单元测试。有没有办法指定单个测试?

编辑:到目前为止,每个人基本上都在说同样的话,但是当我这样做时,没有运行任何测试。还有什么想法吗?

结论:好的,我使用的是测试类的名称,而不是被测试类的名称。一旦我尝试了Foo 而不是FooTests,它就完美地工作了。

【问题讨论】:

  • 你用的是什么版本?我相信这个功能是在 1.2 版本中引入的。 grails.org/1.2+Release+Notes
  • 你能发布你输入的实际命令行和输出吗?正如您从答案中看到的那样,这应该可以工作,因此在实际键入命令之前某处存在问题。例如,测试的名称是什么?测试用例中方法的名称是什么?
  • 第一条评论有误导性,您可以使用 Grails 1.1.1 测试单个单元测试

标签: unit-testing grails


【解决方案1】:

您的设置可能有问题:

  • 您的命令顺序不正确。对我有用的是:

    grails test-app -unit Foo(我的测试类是FooTests.groovy

  • 您没有明确导入grails.test.GrailsUnitTestCase

    当我没有导入它时,我在识别我的测试时遇到了一些问题。当我扩展GroovyTestCase 时,似乎一切正常。

工作示例

这是一组适合我的测试样本。也许您可以发现它们与您的测试之间的一些差异?

注意:这些都是在安装了testing 插件的情况下运行的

test/unit/FooTests.groovy

import grails.test.GrailsUnitTestCase
class FooTest extends GrailsUnitTestCase {
    void testFoo() {
        assert true
    }

    void testBar() {
        assert true
    }
}

test/unit/BarTests.groovy

import grails.test.GrailsUnitTestCase
class BarTest extends GrailsUnitTestCase {
    void testFoo() {
        assert true
    }

    void testBar() {
        assert true
    }
}

test/unit/my/pkg/BazTests.groovy

package my.pkg

import grails.test.GrailsUnitTestCase

class BazTest extends GrailsUnitTestCase {
    void testFoo() {
        assert true
    }

    void testBar() {
        assert true
    }
}

命令:所有单元测试

$ grails test-app -unit
...

Starting unit test phase ...

-------------------------------------------------------
Running 6 unit tests...
Running test my.pkg.BazTest...PASSED
Running test FooTest...PASSED
Running test BarTest...PASSED
Tests Completed in 847ms ...
-------------------------------------------------------
Tests passed: 6
Tests failed: 0
-------------------------------------------------------

...
Tests PASSED - view reports in target/test-reports

命令:Foo 单元测试

$ grails test-app -unit Foo
...

Starting unit test phase ...

-------------------------------------------------------
Running 1 unit test...
Running test FooTest...PASSED
Tests Completed in 815ms ...
-------------------------------------------------------
Tests passed: 2
Tests failed: 0
-------------------------------------------------------

...
Tests PASSED - view reports in target/test-reports

命令:my.pkg.Baz 单元测试

$ grails test-app -unit my.pkg.Baz
...

Starting unit test phase ...

-------------------------------------------------------
Running 2 unit tests...
Running test my.pkg.BazTest...PASSED
Tests Completed in 842ms ...
-------------------------------------------------------
Tests passed: 2
Tests failed: 0
-------------------------------------------------------

...
Tests PASSED - view reports in target/test-reports

我在 Grails 1.2.3 和 Grails 1.3.4 中尝试过这些,它们的行为都一样。

【讨论】:

    【解决方案2】:

    grails test-app -unit YourController.testSomething
    

    YourController 是你的控制器,testSomething 是测试方法。

    你应该看到类似的东西

    测试通过 - 在

    中查看报告

    【讨论】:

    • 嗯。 . .不为我工作。它尝试运行测试,但说通过了,但没有找到。
    【解决方案3】:

    给定一个测试类 foo.BarTests,您可以使用以下命令只运行该类中的测试:

    grails test-app :unit foo.Bar
    

    或在该类中运行单个测试方法,使用:

    grails test-app :unit foo.Bar.testMethod
    

    请注意,在指定测试类的名称时不要包含“Tests”一词。

    【讨论】:

    • 这是我用 Grails 3.3.6 测试单一方法的唯一方法。
    【解决方案4】:
    grails test-app -unit com.package.YourController.testSomething
    

    运行测试时需要包含包名

    【讨论】:

    • 我猜到了,还是不行。如果它是一个服务类,而不是像控制器那样生成,它会有什么不同吗?
    【解决方案5】:

    这肯定行得通,我每天都用它

    以下将运行单个测试

    grails test-app :unit ExampleControllerTests.testName
    

    以下将运行所有 ExampleControllerTests

    grails test-app :unit ExampleControllerTests
    

    【讨论】:

    • OP 明确表示使用测试类的名称是他的错误,但在这里您的示例显示正是这样做的。另外,您的语法看起来很可疑,尾随冒号而不是前导破折号,尽管我真的不知道...
    • 如果您真的不知道,请不要评论和投反对票,这确实有效。使用测试类的名称完全没有问题,我每天都使用它,我知道它有效。 (我使用 grails 1.3.7)
    • 我不知道如何将您所说的与 OP 所说的最终答案相协调。否决票不是针对我自己会忽略的语法。
    • 嗯,这在 Grails 2.0 中对我有用。我很好奇 17 个月前我遇到这个困难时使用的是什么版本。 @ErikE,我建议你推翻你的投票,因为这个答案是正确的,尽管我之前的断言。
    • @Eric 谢谢你的信息!除了投反对票之外,我还发表了评论,以便有机会解决问题——如果它存在的话。现在,这为某人提供了使用新信息更新答案或问题的机会。如果我能提供帮助,我绝不会不公平地投票。伙计们,给这个过程一些信任。 :)
    猜你喜欢
    • 2014-03-20
    • 2011-03-18
    • 1970-01-01
    • 2011-04-25
    • 2020-05-27
    • 2016-02-19
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多