5 nitunit - executes the unit tests from Nit source files.
9 nitunit [*options*] FILE...
13 Unit testing in Nit can be achieved in two ways:
15 * using `DocUnits` in code comments
16 * using `TestSuites` with test unit files
18 `DocUnits` are executable pieces of code found in the documentation of modules,
19 classes and properties.
20 They are used for documentation purpose, they should be kept simple and illustrative.
21 More advanced unit testing can be done using TestSuites.
23 `TestSuites` are test files coupled to a tested module.
24 They contain a list of test methods called TestCase.
26 ## Working with `DocUnits`
28 With DocUnits, executable code can be placed in comments of modules, classes and properties.
29 The execution can be verified using `assert`
35 # assert foo.bar == 10
40 Everything used in the test must be declared.
41 To test a method you have to instantiate its class:
45 # assert foo.bar == 10
48 # assert foo.baz(1, 2) == 3
49 fun baz(a, b: Int) do return a + b
52 The `nitunit` command is used to test Nit files:
56 ## Working with `TestSuites`
58 TestSuites are Nit files that define a set of TestCases for a particular module.
60 The test suite must be called `test_` followed by the name of the module to test.
61 So for the module `foo.nit` the test suite will be called `test_foo.nit`.
63 The structure of a test suite is the following:
65 # test suite for module `foo`
67 import foo # can be intrude to test private things
69 # test case for `foo::Foo::baz`
72 assert subject.baz(1, 2) == 3
76 Test suite can be executed using the same `nitunit` command:
80 `nitunit` will execute a test for each method named `test_*` in a class named `Test*`
81 so multiple tests can be executed for a single method:
86 assert subject.baz(1, 2) == 3
90 assert subject.baz(1, -2) == -1
94 `TestSuites` also provide methods to configure the test run:
96 `before_test` and `after_test`: methods called before/after each test case.
97 They can be used to factorize repetitive tasks:
101 # Mandatory empty init
103 # Method executed before each test
108 assert subject.baz(1, 2) == 3
111 assert subject.baz(1, -2) == -1
115 When using custom test attributes, an empty `init` must be declared to allow automatic test running.
117 `before_module` and `after_module`: methods called before/after each test suite.
118 They have to be declared at top level:
120 module test_bdd_connector
122 # Testing the bdd_connector
124 # test cases using a server
126 # Method executed before testing the module
128 # start server before all test cases
130 # Method executed after testing the module
132 # stop server after all test cases
135 ## Generating test suites
137 Write test suites for big modules can be a repetitive and boring task...
138 To make it easier, `nitunit` can generate test skeletons for Nit modules:
140 $ nitunit --gen-suite foo.nit
142 This will generate the test suite `test_foo` containing test case stubs for all public
143 methods found in `foo.nit`.
149 : Process also imported modules.
151 By default, only the modules indicated on the command line are tested.
153 With the `--full` option, all imported modules (even those in standard) are also precessed.
156 : Output name (default is 'nitunit.xml')
158 `nitunit` produces a XML file comatible with JUnit.
161 : Working directory (default is '.nitunit')
163 In order to execute the tests, nit files are generated then compiled and executed in the giver working directory.
166 : Does not compile and run tests.
169 : Only run test case with name that match pattern. Examples: `TestFoo`, `TestFoo*`, `TestFoo::test_foo`, `TestFoo::test_foo*`, `test_foo`, `test_foo*`
171 `-t`, `--target-file`
172 : Specify test suite location.
177 : Generate test suite skeleton for a module
180 : Force test generation even if file exists.
182 Any existing test suite will be overwritten.
185 : Also generate test case for private methods.
188 : Only display the skeleton, do not write any file.
192 The Nit language documentation and the source code of its tools and libraries may be downloaded from <http://nitlanguage.org>