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.