dunit 0.7.0 released

Gary Willoughby dev at nomad.so
Mon Oct 21 12:02:44 PDT 2013


On Monday, 21 October 2013 at 11:58:14 UTC, Jonathan M Davis 
wrote:
> On Monday, October 21, 2013 13:48:16 Dicebot wrote:
>> On Monday, 21 October 2013 at 11:09:25 UTC, ilya-stromberg 
>> wrote:
>> > Guys, we have at least 5 (!) different unit test projects!
>> > Can you cooperate your efforts to create one, but wonderful?
>> 
>> ...and add it to Phobos review queue ;)
>
> I confess that I don't understand why anyone is creating any 
> unit test
> projects for D, and I'd likely vote against any attempt to add 
> such a thing to
> Phobos. D has built in unit testing functionality, and it works 
> great. Maybe
> some additional assert-like functions could be useful (similar 
> to assertThrown
> or assertNotThrown), but we really don't need much beyond what 
> the language
> provides.
>
> - Jonathan m Davis

"640K ought to be enough for anybody"

Seriously though, unit testing is a major tool that all languages 
should have access to. The built-in stuff is adequate for very 
simple testing on simple types such as asserting something is 
true, etc. But when you're writing tests for a class that need 
dependencies then the built-in stuff won't cut it. The framework 
i'm currently working allows for mocking of dependencies which in 
itself is a big deal. Replacing dependencies with 'fake' stubs is 
something which makes unit tests a lot clearer and less 
complicated. It also means i can override the return value of any 
method at runtime to pretend returned data is real there too.

I've also extended the assert mechanism in the D runtime to 
create better errors. Instead of just getting:

     core.exception.AssertError at file(57): Assertion failure

You now get:

     
+----------------------------------------------------------------------
     | Failed asserting equal
     
+----------------------------------------------------------------------
     | File: file.d
     | Line: 57
     
+----------------------------------------------------------------------
     | ✓ Expected value: (int[]) [1, 2, 3, 4, 5]
     | ✗ Actual value: (int[]) [1, 2, 4, 5]

This is way more clear exactly what and where failed. This is 
essential when unit testing using structs, arrays, classes, etc.. 
as you need this information to truly narrow down exactly what 
failed. Extending stuff like this also helps with overall project 
reporting, writing to a file or drawing pretty graphs etc..


More information about the Digitalmars-d-announce mailing list