Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Unittests

Part of TutorialFundamentals

Description

Unittests let you find the bugs before you even run the program.

About unittests

According to this example, unittests may be run in the order they appear in the code. Since the Whatever class appears before the module unittests, these are run first.

The -unittests flag has to be used to compile this program or else this code is ignored.

Example

module unittests;

import std.stdio;

void main() {
    writefln("test");
    /* This assertion will fail. */
    assert(false);  

    /* 
        The line number (7) may be different, but this is the 
        error message which should appear...
        Error: AssertError Failure unittests(7)
    */
}

class Whatever {
   
    unittest {
        writefln("class Whatever UnitTest...");
        /* If the expession of an assert doesn't evaluate to true, an exception is thrown at run-time. */

        assert(true==1);
        assert(true);
        assert(false==false);
        assert(!false);
    }
}

unittest {
    writefln("module UnitTest...");
    assert(true==1);
    assert(true);
    assert(false==false);
}

Example 2

module unittests;

import std.stdio;

void main() {
  writefln( "Passes!");

  return;
}


class Factoid {
  int factorial() {
    int x = 1;
    int f;

    for( x = 0 ; x <= m_int; ++x) {
      if( x == 0) {
	f = 1;
      }
      else {
	f *= x;
      }
    }

    return f;
  }


  this(int x) {
    m_int = x;
  }

  private{
    int m_int;
  }

  unittest{
    Factoid f = new Factoid(3);

    assert( 6 == f.factorial());
  }
}