On Wednesday, 22 April 2020 at 10:32:48 UTC, Russel Winder wrote:
I ended up creating the following project structure:

.
├── dub.sdl
├── dub.selections.json
├── source
│   ├── arcam_protocol.d
│   └── main.d
├── tests
│   └── integration_tests.d
└── test_support
    └── mock_avr850
        └── main.d

with the following Dub control file:

name "arcamclient"
description "arcamclient is a Rust/gtk-rs/GTK+ desktop application to control an Arcam amplifier over the Ethernet connection."
authors "Russel Winder"
copyright "Copyright © 2020 Russel Winder."
license "GPL-3.0"
targetType "executable"
targetPath "bin"

configuration "application" {
}

configuration "unittest" {
    targetName "arcamclient_test"
    dependency "unit-threaded" version="*"
    mainSourceFile "bin/ut.d"
    excludedSourceFiles "source/main.d"
preBuildCommands "$DUB run --compiler=$$DC unit-threaded -c gen_ut_main -- -f bin/ut.d -d $DUB"
    preBuildCommands "$DUB build arcamclient:mock_avr850"
    importPaths "tests"
    sourcePaths "tests"
}

subPackage {
    name "mock_avr850"
    targetName "mock_avr850"
    targetType "executable"
    targetPath "bin"
    sourcePaths "source" "test_support/mock_avr850"
    importPaths "source" "test_support/mock_avr850"
    excludedSourceFiles "source/main.d"
}

This seems a bit more sensible that what I have been able to achieve with Rust, but is still second rate compared to how easy things are using Python.


Have you try Silly? I found far more straightforward to use, that unit-threaded.

On my pet game engine, I got it working with this :

"configurations": [
...
    {
        "dependencies": {
            "beep": "~>0.0.2",
            "silly": "~>1.0.2"
        },
        "name": "unittest",
        "targetType": "library"
    }
],

Sadly, Silly only is the test runner (and one far prettier that unit-threaded). I need to add separated dub module to make assertion more easy and fluent. Beep go on the correct path with a API like this :

@("My test")
unittest {
    myFunc(1, 2, 3).expect!equals(42);
    auto a = [1, 2 ,3];
    a.expect!contains(2);
    a.lenght.expect!great(0);
    true.expect!true();
}

And the output on case of fail, shows a human friendly message with the expected value and the real value.

Another assertion module that not depends on unit-threaded and have better API, is pyjamas . But actually is abandoned. I did a try to get it working again, but depends on another dead dub module... another test runner called "bed" (that I did a PR to fix it to get it working against the actual DMD version).

Finally... What I really miss are two things :

- A test/integration framework like Spock (Yeah, I professionally work on Java world :( ) - Test runners had a common output format that make IDE/tools work far more easy. See https://github.com/nomad-software/dunit/issues/19#issuecomment-435209223

Offtopic: Should be a way to mark a dub module dead on dub register. This last weeks I don't stop of finding dead/not working stuff and given a really bad image of the state of D.


Reply via email to