Re: Build and run unit tests automatically on target build
Mats Wichmann <[email protected]> Mon, 17 Jun 2024 14:18:54 -0600
| Newsgroups | gmane.comp.programming.tools.scons.user |
|---|---|
| Message-ID | <[email protected]> |
On 6/17/24 13:26, Matthew Ryan wrote: > I've been looking for some way of building and running a unit test > after another target is run, but so far have been unable to come up > with a recipe. > > The specific example is that of a C/C++ static library built by > `env.Library()` - I want a setup where, whenever the static library is > rebuilt, a unit test (built by `env.Program` and linked against the > static library) is built and run automatically, and if it fails, the > build fails, so anything later on that links against libfoo would not > build. > > Is such a thing possible? A number of approaches have been tried over the years. It's not "native" to scons, which likes to deal in a dependency tree and figure out what's out of date and build that. if running a unit test produces a predictably-named output file you can wire up the plumbing so that file looks like a target, then it becomes more natural. There's a wiki entry which isn't really that great: https://github.com/SCons/scons/wiki/UnitTests There was someone who wrote a blog post about it doing something a bit better - there are a couple of links in the wiki page. Someone wrote up a github project for a cxxtest tool (whch doesn't help if cxxtest doesn't work for you, but the ideas might). https://github.com/ptomulik/scons-tool-cxxtest When I first started using SCons it was on a C++ project that did triggered unit testing (including some extras, like "if on Linux, also run valgrind on the binary"), I tried to fix the mechanism but as I was very new to SCons at the time I never came up with something I thought was better. I can post excerpts of that approach if wanted, would take a little memory refresh as it's been about seven years. In my aside from the first paragraph, the log produced by valgrind became a target, so that part was actually pretty solid. This is just a quick response, feel free to ask more questions and give more details on what didn't work, etc.