I have bunch of `static assert(<condition>, <message>)` in my code and would like to validate that specific code triggers specific assert by checking what `<message>` is thrown.

Right now I do `static assert(!__traits(compiles, { <my code> }));` but since `<my code>` might not compile due to many different reasons, I might not be testing original `static assert` and might miss breaking change.

One way to do this is to extract `<condition>` and `<message>` into some function and test it outside of `static assert`:
```d
auto check()
{
return tuple(false, // check result ('false' is just for example)
                 "message");
}

void f()
{
    enum result = check();
    static assert(result.condition, result.message);
}

unittest
{
    enum result = check();
    static assert(result.condition);
    static assert(result.message == "message");
}
```
But I don't like this approach because unit test doesn't really test `f()` (it tests duplicated code) so it can't guarantee that `f()` works as expected.


Is there a way to validate static asserts in unit tests?

Reply via email to