diff --git a/python/src/com/jetbrains/python/inspections/PyAttributeOutsideInitInspection.java b/python/src/com/jetbrains/python/inspections/PyAttributeOutsideInitInspection.java index 554cdc763400..5f321bd445a3 100644 --- a/python/src/com/jetbrains/python/inspections/PyAttributeOutsideInitInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyAttributeOutsideInitInspection.java @@ -2,7 +2,6 @@ package com.jetbrains.python.inspections; import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; @@ -52,10 +51,8 @@ public class PyAttributeOutsideInitInspection extends PyInspection { public void visitPyFunction(PyFunction node) { final PyClass containingClass = node.getContainingClass(); if (containingClass == null) return; - if (PythonUnitTestUtil.isUnitTestCaseClass(containingClass) || ApplicationManager.getApplication().isUnitTestMode()) { - final String functionName = node.getName(); - if (functionName != null && functionName.startsWith("setUp")) - return; + if (PythonUnitTestUtil.isUnitTestCaseClass(containingClass)) { + return; } Map attributesInInit = new HashMap(); diff --git a/python/src/com/jetbrains/python/testing/PythonUnitTestUtil.java b/python/src/com/jetbrains/python/testing/PythonUnitTestUtil.java index 183d18c45d0d..4ba92e045eb4 100644 --- a/python/src/com/jetbrains/python/testing/PythonUnitTestUtil.java +++ b/python/src/com/jetbrains/python/testing/PythonUnitTestUtil.java @@ -2,6 +2,7 @@ package com.jetbrains.python.testing; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.containers.Stack; @@ -50,6 +51,11 @@ public class PythonUnitTestUtil { } private static boolean isUnitTestCaseClass(PyClass cls, HashSet testQualifiedNames) { + if (ApplicationManager.getApplication().isUnitTestMode()) { + for (PyExpression expression : cls.getSuperClassExpressions()) { + if (expression.getText().equals("TestCase")) return true; + } + } for (PyClassLikeType type : cls.getAncestorTypes(TypeEvalContext.codeInsightFallback())) { if (type != null && testQualifiedNames.contains(type.getClassQName())) { return true; diff --git a/python/testData/inspections/PyAttributeOutsideInitInspection/unitTest.py b/python/testData/inspections/PyAttributeOutsideInitInspection/unitTest.py new file mode 100644 index 000000000000..9263578b1b95 --- /dev/null +++ b/python/testData/inspections/PyAttributeOutsideInitInspection/unitTest.py @@ -0,0 +1,9 @@ +__author__ = 'ktisha' + +from unittest import TestCase +class MyTestCase(TestCase): + def setUp(self): + self.my = 1 + + def test(self): + self.my = 2 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyAttributeOutsideInitInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyAttributeOutsideInitInspectionTest.java index 88f03497c0e4..69b0317a8698 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyAttributeOutsideInitInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyAttributeOutsideInitInspectionTest.java @@ -23,6 +23,10 @@ public class PyAttributeOutsideInitInspectionTest extends PyTestCase { doTest(); } + public void testUnitTest() { + doTest(); + } + public void testFromSuperClassWithoutInit() { doTest(); }