-
Notifications
You must be signed in to change notification settings - Fork 396
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix #771: attr plugin is broken when parent overrides child method
The issue is when the parent and child have different attributes, and the parent method was being bypassed because of the attribute selection. In this case, Nose would incorrectly use the version from the base class, even though it was supposed to skip the method entirely. To fix this, we need simply need to stop digging through base classes. The dir() method returns a flattened set of methods, so there's no need to iterate through the base classes trying to dig up all the methods. Moreover, it leads to false positives since we were not keeping track of methods seen on the parent classes. As a result, we'd incorrectly select a test for inclusion (using attributes), or we'd pick up a method that we should've ignored (like runTest in a Twisted test case). Thanks to Thomas Grainger for providing a test case!
- Loading branch information
1 parent
129bd91
commit b65c42f
Showing
5 changed files
with
38 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from nose.plugins.attrib import attr | ||
|
||
from unittest import TestCase | ||
|
||
@attr("b") | ||
def test_b(): | ||
assert 1 == 1 | ||
|
||
class TestBase(TestCase): | ||
def test_a(self): | ||
assert 1 == 1 | ||
|
||
class TestDerived(TestBase): | ||
@attr("a") | ||
def test_a(self): | ||
assert 1 == 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters