I\'ve been running my Grails unit tests by typing grails test-app :unit
, which runs all unit tests. Is there a way to specify a single test?
Edit:<
Given a test class foo.BarTests you can run just the tests in that class using the following command:
grails test-app :unit foo.Bar
Or run a single test method within that class using:
grails test-app :unit foo.Bar.testMethod
Note that you do not include the word "Tests" when specifying the name of test class.
grails test-app -unit com.package.YourController.testSomething
you need to include the package name when you run the test
Possibilities of things that might be wrong with your setup:
Your command order is incorrect. What works for me is:
grails test-app -unit Foo
(where my test class is FooTests.groovy
)
You aren't explicitly importing grails.test.GrailsUnitTestCase
.
I had some problems with it recognizing my tests when I didn't import this. When I was extending GroovyTestCase
, things seemed to work normally.
Here's a sample set of tests that work for me. Perhaps you can spot some differences between them and your tests?
Note: These are all run with the testing
plugin installed
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
}
}
command: all unit tests
$ 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
command: Foo unit tests
$ 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
command: my.pkg.Baz unit tests
$ 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
I tried these in Grails 1.2.3 and Grails 1.3.4, both behaved the same.
This would work for sure, I use it every day
Following will run a single test
grails test-app :unit ExampleControllerTests.testName
Following will run all ExampleControllerTests
grails test-app :unit ExampleControllerTests
yes there is
grails test-app -unit YourController.testSomething
where YourController is your controller and testSomething is the test method.
You should see something like
Tests PASSED - view reports in