On Thursday, 22 March 2018 at 13:58:50 UTC, Atila Neves wrote:
On Thursday, 22 March 2018 at 12:26:14 UTC, Anton Fediushin
Tests in their own file is something from 90-s. It's 2018 and
I want to be able to write tests anywhere I want.
You _can_ write them wherever you want. I'm not arguing for
taking any flexibility away, I'm arguing that for most projects
it's a bad idea, and I stated the reasons why I think that's
the case. Feel free to disagree.
Since your article is wrong about dub's way of handling
`unittest` configuration (take a look at my last post), the only
valid point is "they increase build times".
The only choice you have to make is: you take the red pill and
choose convenience over compilation speed or you take the blue
pill for speed over the convenience.
None of the choices is "good" or "bad". They're just slightly
different.
"They increase build times" - fix compiler, not my code.
If by "fix the compiler" you mean "make it so that the compiler
knows exactly what files need to be recompiled if I only edited
the body of a unittest block" (which is what would be needed),
then I don't think that'll happen any time soon.
But sure, if the compiler worked that way I'd happily advocate
for writing unittests in the same file. But for now, I'd rather
spend a lot less time staring at the screen for 2s waiting for
my code to be built. That's my trade-off, and reasonable people
may (and apparently quite obviously do) disagree.
I'm not a compiler developer, so I don't mean anything in
particular. Just saying.
I didn't knew that change in unittest block causes rebuilding of
many modules, so that's good to know.
"version(unittest) will cause you problems if you write
libraries" - fix dub, not my code.
This is _not_ a dub issue. version(unittest) _will_ bite you as
soon as you compile foo.d with -unittest because its imports
will be parsed differently. This is one to stick in the "fix
the compiler" column. See the link to the since-reverted Phobos
PR in the blog.
Yeah, I was wrong about dub. I'm so sorry since it turned out
that dub handles `dub test` in the way that never causes problems
with `version(unittest)`.
What about `version(unittest)` itself - as any of the conditional
compilation features it should be handled with care. Especially
when we are talking about cases where dub isn't used.