Filtering `catch` tests by label when running with `ctest`

3

I am currently using ctest to run tests written with the Catch framework. I would like to be able to filter which tests I run based on the internal Catch tags; for instance, I would like to be easily prevent any tests tagged [FUTURE] from running.

For a single test executable, ignoring ctest, this is straightforward:

myTestName '~[FUTURE]'

But I don't see any way to pass the '~[FUTURE]' argument to the Catch tests via ctest. This should be possible --test-command, but (1) --test-command doesn't seem to do anything without --build-and-test (which is not what I want) and (2) this apparently only works for one test at a time anyway, which is also not what I want (I just want to run ctest on my entire project).

I could just use ctest -N to get the names of the tests to run, then run the tests myself, but I don't know of any way to get the test filepath from ctest so I'd have to run find on all the test-names, and at that point I'm basically implementing my own test runner.

P.S. There are no existing tags for ctest or the Catch test framework, and I don't have the rep to create them. I'm not really sure what other tags would apply here. I'm only using the cmake tag because ctest is part of cmake.

Kyle Strand

Posted 2015-04-14T22:19:07.340

Reputation: 1 206

1Did you ever figure this out? – jorgeh – 2015-10-19T17:46:22.017

1@jorgeh No, I did not. It does seem like a pretty glaring omission in ctest.... – Kyle Strand – 2015-10-19T17:48:58.033

I need something a little like this, so here's my current vague idea: you could declare each test to ctest twice, once with ~[FUTURE] as my-test-name and once without as my-test-name-future. Then you could filter them with a ctest regex. Alternatively you could add a ctest label to the future ones and use ctest's label filtering to run the right ones (might be a bit more robust than regexing the name).

You could use a cmake wrapper function for test registration to make sure it was done consistently. – dshepherd – 2017-10-17T14:40:47.320

No answers