Floris, your advice was invaluable. We have created a really fantastic PyTest plugin for our service tests. However, I wanted to share it with you, because it seems to have introduced some type of weird conflict with the PyTest Coverage plugin, and I was hoping maybe you had some insights as to what the problem might be:
Normally, when I run PyTest tests with the PyTest Coverage plugin, everything works as expected in regards to the coverage calculation and the coverage reports. And, with this change to our project, everything STILL works properly IF AND ONLY IF I run tests with `coverage run --source=pysoa setup.py test` followed by `coverage report` (so, without the PyTest Coverage plugin). However, with this change to our project, something VERY weird happens to the coverage report if I rely on the PyTest Coverage plugin. Now, ONLY LINES OF CODE WITHIN FUNCTIONS AND METHODS are marked as covered. The following types of code, which were previously marked as covered (and are clearly covered), are now marked as uncovered (again, only when using the PyTest Coverage plugin): - module-level imports - module-level code that executes on import - module docstrings - module-level class definitions (class ClassName(...):), or class definitions within other class definitions - code that executes within a class on definition - class docstrings - function definition lines (def func_name(...):), but not the code within the functions, which is marked as covered - method definition lines within classes (def method_name(...):), but not the code within the functions, which is marked as covered While the entire pull request is large and daunting, the most relevant part is the PyTest plugin itself, which is contained in a single file "pytest_plugin.py" that you can search for on the page. Here it is: https://github.com/eventbrite/pysoa/pull/87/files Unfortunately, I did not notice this problem with coverage until the bulk of the code was written and tested, so determining what part of the code caused it by removing bits of code is ... impracticable. I'm hoping one of the pytest-cov experts in here will have some idea what the heck is going on and can point me in the right direction. Perhaps I'm doing something wrong, but this smells very strongly of a pytest-cov bug somehow. Thanks, Nick On Fri, Apr 20, 2018 at 2:50 PM, Floris Bruynooghe <f...@devork.be> wrote: > On Thu 19 Apr 2018 at 16:50 -0500, Nicholas Williams wrote: > > > The tests work this way: > > > > - There's a test class that inherits from our specialized test class > > (ServicePlanTestCase), which inherits from `unittest.TestCase` (for > several > > reasons, this detail cannot be altered) > > - That test class can do setup and teardown like a normal test class, but > > it has a static attribute that points to a directory > > - That directory contains one or more files ending in a particular > > extension, and those files each contain one or more tests defined using a > > particular syntax > > I'm not even going to ask how this all came to be this way... but thanks > for giving enough context. > > > Based on the hints you gave me, it sounds like I could do something like > > this: > > https://github.com/pytest-dev/pytest/blob/4678cbeb913385f00cc21b79662459 > a8c9fafa87/_pytest/unittest.py#L14-L22 > > > > Only, instead of checking for inheritance from TestCase, I'd check for > > inheritance from our ServicePlanTestCase, and in that case I would > return a > > new collector object that inherits from _pytest.python.Class, and write > > that new collector class to collect our tests. Am I barking up the right > > tree now? > > pytest_pycollect_makeitem is supposed to create a single item, > while from what you describe you still have two collections nested. You > should probably create a custom collection node for your class, which > then creates a different kind of collection node for each file which in > turn creates the actual test nodes in it's .collect(). >
_______________________________________________ pytest-dev mailing list pytest-dev@python.org https://mail.python.org/mailman/listinfo/pytest-dev