[Twisted-Python] Coverage exceptions
Glyph Lefkowitz
glyph at twistedmatrix.com
Thu Jun 30 16:25:38 MDT 2016
> On Jun 30, 2016, at 04:13, Jean-Paul Calderone <exarkun at twistedmatrix.com> wrote:
>
> On Thu, Jun 30, 2016 at 6:43 AM, Adi Roiban <adi at roiban.ro <mailto:adi at roiban.ro>> wrote:
> Hi,
>
> Recently we have introduced a hard check of 100% coverage for all changes.
> This is done via coverage + codecov + github protected branches.
>
> Now, if your patch is not 100% covered github will not let you merge it.
>
> See for example this change: https://github.com/twisted/twisted/pull/261/files#diff-0fea8a8ca713deb7ea6a10053273319aR2360 <https://github.com/twisted/twisted/pull/261/files#diff-0fea8a8ca713deb7ea6a10053273319aR2360>
>
> The errback is there to help with test failures ... but the test should never fail, so that errback is never called... and that line is not covered.
>
>
> It doesn't always make sense to require 100% execution of all test code. It's not at all uncommon to only have code in a test suite that runs when a test fails. Historically, Twisted has never had a requirement of 100% execution of test code. The only test suite coverage requirements that have commonly been requested or enforced is for coverage of implementation code.
>
> I'd suggest removing the coverage enforcement for test suite code.
I am inclined to disagree, albeit mildly.
When one is writing a deliberately un-covered path in test code, presumably, one is writing either a test helper - a mock, fake, or utility for setting up a real implementation - or an assertion method. Historically, I believe that when we've invested more heavily in making these utilities "real" themselves, and not just throwaway stuff inline in a test method or module, the benefits have far outweighed the costs. In fact the availability of proto_helpers is one of the selling points of Twisted as opposed to other competing engines.
Therefore, I think that asking folks to add independent test coverage to verify their fakes and ensure that the failure-reporting of their assertion messages are helpful in the event a test fails is a generally good idea, and we should keep the requirement for 100% coverage on both test and implementation coverage.
However, if there is contention around this, I'd much rather get a ratchet in place for implementation code that's reliable and everyone is happy with, so I'm OK with disabling coverage reporting for our *.test.* packages as a step towards that.
> How should we proceed with these changes?
>
> Maybe this is not the best example and that code could be refactored... but I think that the topic of ignoring missing coverage is still valid.
>
> I suggest to introduce ` # pragma: no cover`
>
> and update the coverage config with
>
> [report]
> exclude_lines =
> pragma: no cover
>
>
> This seems like the wrong solution to me. It forces contributors to do extra work to mark their test code as an exception and provides a mechanism for incorrectly bypassing the check by using a no-cover pragma in implementation code.
In any case I totally agree with this. If we have a categorical difference in types of code (test vs. non-test) then let's make that distinction, but we should not be adding one-off exceptions as an exercise of non-uniform reviewer judgement on every review.
-glyph
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20160630/4e1ad970/attachment-0002.html>
More information about the Twisted-Python
mailing list