Advanced unit testing toolkit for the D programming language
DUnit is a unit testing toolkit for the D programming language. The toolkit comprises of a solution to mocking objects and a library to enable more expressive and helpful assertions.
Unit testing is necessary to assert units of code perform in isolation and conform to repeatable and known expectations. DUnit gives you the tools to make this task an easier one.
DUnit was developed and tested with the latest DMD compiler and should support any platform DMD supports as it only contains platform independent code. Other compilers have not been tested but should build fine.
DUnit features a mixin template to inject mockable behaviour into a class or interface. Once injected, a static method allows you to retrieve an object with the same properties as the class or interface it was retrieved from. Mock objects behave and act as their parent (or in the case of interfaces an implemention) but with the added feature that all methods can be replaced by a delegate at runtime*.
- Final methods cannot be replaced.
- The mixin only injects code when the
-unittest
compiler flag is used.
When using DUnit the built-in unit test handler has been replaced to give more helpful error messages. When something goes wrong the error tries to be as helpful as possible by showing file, line, and assert value output.
DUnit by Gary Willoughby.
> Running unit tests
- example
+----------------------------------------------------------------------
| Failed asserting equal
+----------------------------------------------------------------------
| File: example.d
| Line: 91
+----------------------------------------------------------------------
| ✓ Expected value: (int) 1
| ✗ Actual value: (ulong) 2
- Mocking behaviour is only injected in unit test mode so you must used the
-unittest
flag for mocking to work. - Usually when using DUnit all unit testing code is placed within unittest blocks. If this is the case you must compile using the
-unittest
flag to enable their execution.
- When compiling using the
-unittest
switch be mindful that standard assert functions will exit the program and display an error, even when compiled with the-release
switch! To stop this happening, remove the-unittest
switch from the compile command and-release
will once again ignore asserts.
There is full HTML documentation within the repository inside the docs directory.
To build DUnit as a static library using dub use the following command.
dub build --build=unittest --config=library