-
Notifications
You must be signed in to change notification settings - Fork 11
D Unit Testing Framework - class MyTest {mixin TestMixin; testMethod(){assert(true);} }
License
jmcabo/dunit
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Unit testing framework ('dunit') Allows to define unittests simply as methods which names start with 'test'. The only thing necessary to create a unit test class, is to declare the mixin TestMixin inside the class. This will register the class and its test methods for the test runner. License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>. Authors: Juan Manuel Cabo Version: 0.6 Source: dunit.d Last update: 2012-03-21 Copyright Juan Manuel Cabo 2012. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) --------------------------------------------------------------------------------- module ExampleTests; import std.stdio, std.string; import core.thread; import dunit; //Minimal example: class ATestClass { mixin TestMixin; void testExample() { assertEquals("bla", "b"~"la"); } } /** * Look!! no test base class needed!! */ class AbcTest { //This declaration here is the only thing needed to mark a class //as a unit test class: mixin TestMixin; //Variable members that start with 'test' are allowed. public int testN = 3; public int testM = 4; //Any method whose name starts with 'test' is run as a unit test: //(NOTE: this is bound at compile time, there is no overhead). public void test1() { assert(true); } public void test2() { //You can use D's assert() function: assert(1 == 2 / 2); //Or dunit convenience asserts (just edit dunit.d to add more): assertEquals(1, 2/2); //The expected and actual values will be shown in the output: assertEquals("my string looks dazzling", "my dtring looks sazzling"); } //Test methods with default arguments work, as long as they can //be called without arguments, ie: as testDefaultArguments() for instance: public void testDefaultArguments(int a=4, int b=3) { } //Even if the method is private to the unit test class, it is still run. private void test5(int a=4) { } //This test was disabled just by adding an underscore to the name: public void _testAnother() { assert(false, "fails"); } //Optional initialization and de-initialization. // setUp() and tearDown() are called around each individual test. // setUpClass() and tearDownClass() are called once around the whole unit test. public void setUp() { } public void tearDown() { } public void setUpClass() { } public void tearDownClass() { } } class DerivedTest : AbcTest { mixin TestMixin; //Base class tests will be run!!!!!! // //You can for instance override setUpClass() and change the target //implementation of a family of classes that you are testing. // //For instance: Run a set of tests against all derived classes of //the Stream class. You do this by keeping all the tests in a parent //test class, and creating a derived TestFixture for each one, //that all it has to do is instantiate the instance under test in the //overriden setUpClass(). } /** * You can write asynchronous tests too!! Test those socket listeners of * yours, or your active thread objects, etc.!! */ class AsynchronousTestExample { mixin TestMixin; Thread theThread; bool threadDidItsThing; //Prepare the test: void setUp() { threadDidItsThing = false; theThread = new Thread(&threadFunction); } //Cleanup: void tearDown() { theThread.join(); theThread = null; } void threadFunction() { threadDidItsThing = true; } void testThreadActuallyRuns() { assertEquals(false, threadDidItsThing); //Start the thread theThread.start(); //Assert that within a period of time (500ms by default), the variable //threadDidItsThing gets toggled: assertWithTimeout({return threadDidItsThing;}); } } version = DUnit; version(DUnit) { //-All you need to run the tests, is to declare // // mixin DUnitMain. // //-You can alternatively call // // dunit.runTests_Progress(); for java style results // output (SHOWS COLORS IF IN UNIX !!!) // or // dunit.runTests_Tree(); for a more verbose output // //from your main function. mixin DUnitMain; //void main() {dunit.runTests_Tree();} } else { int main (string[] args) { writeln("production"); } } /* * Alternatively, you can run your DUnit tests when passing -unittest * to the compiler. This only needs to be declared once for the whole * application, and will run all the tests in all modules before the * application starts: */ unittest { dunit.runTests(); } /* Run this file with (works in Windows/Linux): dmd exampleTests.d dunit.d ./exampleTests The output will be (java style): ...F....F... There were 2 failures: 1) test2(AbcTest)[email protected](61): Expected: 'my string looks dazzling', but was: 'my dtring looks sazzling' 2) test2(DerivedTest)[email protected](61): Expected: 'my string looks dazzling', but was: 'my dtring looks sazzling' FAILURES!!! Tests run: 10, Failures: 2, Errors: 0 If you use the more verbose method dunit.runTests_Tree(), then the output is: Unit tests: ATestClass OK: 0.01 ms testExample() AbcTest OK: 0.00 ms test1() FAILED: test2(): [email protected](62): Expected: 'my string looks dazzling', but was: 'my dtring looks sazzling' OK: 0.00 ms testDefaultArguments() OK: 0.00 ms test5() DerivedTest OK: 0.01 ms test1() FAILED: test2(): [email protected](62): Expected: 'my string looks dazzling', but was: 'my dtring looks sazzling' OK: 0.00 ms testDefaultArguments() OK: 0.00 ms test5() AsynchronousTestExample OK: 11.00 ms testThreadActuallyRuns() HAVE FUN! */
About
D Unit Testing Framework - class MyTest {mixin TestMixin; testMethod(){assert(true);} }
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published