Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
March 28, 2018 unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
I'm trying to build a very simple library. For now it just has a single class, constructor, destructor and one method. I added a unit test right after the method, declared the targetType to be "library" and a buildType of "unittest" (with options "unittests", "debugMode", "debugInfo"). When I run dub run -b unittest it builds the library, but then says: Target is a library. Skipping execution. If I compile with ldc2 -unittest the linker throws the error: (.text+0x20): undefined reference to `main' If I add an empty main function to the source file, ldc2/gcc manage to create an executable that can be invoked manually and it runs through the unit test. Is this the best that can be done? |
March 27, 2018 Re: unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
Posted in reply to Joe | On Wednesday, March 28, 2018 02:16:59 Joe via Digitalmars-d-learn wrote:
> I'm trying to build a very simple library. For now it just has a single class, constructor, destructor and one method. I added a unit test right after the method, declared the targetType to be "library" and a buildType of "unittest" (with options "unittests", "debugMode", "debugInfo"). When I run
>
> dub run -b unittest
>
> it builds the library, but then says:
>
> Target is a library. Skipping execution.
>
> If I compile with ldc2 -unittest the linker throws the error:
>
> (.text+0x20): undefined reference to `main'
>
> If I add an empty main function to the source file, ldc2/gcc manage to create an executable that can be invoked manually and it runs through the unit test.
>
> Is this the best that can be done?
Run
dub test
The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
- Jonathan M Davis
|
March 28, 2018 Re: unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis wrote:
> Run
>
> dub test
>
> The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
Thanks.
|
March 28, 2018 Re: unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis wrote:
> Run
>
> dub test
>
> The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
>
> - Jonathan M Davis
And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function.
|
March 28, 2018 Re: unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jesse Phillips | On Wednesday, 28 March 2018 at 21:29:22 UTC, Jesse Phillips wrote: > And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function. For reference: https://github.com/dlang/dub/issues/1118 |
March 28, 2018 Re: unittests, dub and libraries | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jesse Phillips | On Wednesday, March 28, 2018 21:29:22 Jesse Phillips via Digitalmars-d-learn wrote:
> On Wednesday, 28 March 2018 at 03:07:23 UTC, Jonathan M Davis
>
> wrote:
> > Run
> >
> > dub test
> >
> > The problem is that an executable needs a main, and a library doesn't have one, whereas when you're testing a library, you need an executable. So, a main must be inserted - e.g. with the -main flag to dmd. Just building the unittest build doesn't insert one. However, dub test _does_ deal with that for you.
> >
> > - Jonathan M Davis
>
> And a note on the reverse, if you have an executable project $ dub test won't build in the app.d file since it contains main and dub test wants to avoid running your main function.
Yeah. That's really annoying behavior. I keep forgetting that it does that until I realize that I have tests that should be failing that aren't.
- Jonathan M Davis
|
Copyright © 1999-2021 by the D Language Foundation