Why think unit tests should be in their own source code hierarchy instead of side-by-side

Anton Fediushin fediushin.anton at yandex.ru
Thu Mar 22 17:11:10 UTC 2018


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.




More information about the Digitalmars-d-announce mailing list