From 262636115d72d2774f1ebe426211ebb312140d91 Mon Sep 17 00:00:00 2001 From: Tomasz Tretkowski Date: Sun, 30 Oct 2011 16:27:52 +0100 Subject: [PATCH] Abstract classes are not shown as nunit test fixtures in test pad. Fixed StackOverflowError when updating test class members from new compilation unit. --- .../Analysis/UnitTesting/Src/NUnitTestFramework.cs | 2 ++ src/AddIns/Analysis/UnitTesting/Src/TestClass.cs | 4 ++-- .../Frameworks/NUnitTestFrameworkIsTestClassTests.cs | 8 ++++++++ .../Test/Project/DuplicateMethodNameTestFixture.cs | 10 ++++++---- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs b/src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs index 63874ee222..d9a0614bce 100644 --- a/src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs +++ b/src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs @@ -44,6 +44,8 @@ namespace ICSharpCode.UnitTesting /// public bool IsTestClass(IClass c) { + if (c == null) return false; + if (c.IsAbstract) return false; StringComparer nameComparer = GetNameComparer(c); if (nameComparer != null) { NUnitTestAttributeName testAttributeName = new NUnitTestAttributeName("TestFixture", nameComparer); diff --git a/src/AddIns/Analysis/UnitTesting/Src/TestClass.cs b/src/AddIns/Analysis/UnitTesting/Src/TestClass.cs index 9c0f2fcd8d..ec3312abbb 100644 --- a/src/AddIns/Analysis/UnitTesting/Src/TestClass.cs +++ b/src/AddIns/Analysis/UnitTesting/Src/TestClass.cs @@ -297,7 +297,7 @@ namespace ICSharpCode.UnitTesting { foreach (var testMember in testFrameworks.GetTestMembersFor(c.BaseClass)) { BaseTestMember baseTestMethod = new BaseTestMember(declaringType, testMember.Member); - TestMember testMethod = new TestMember(c, baseTestMethod); + TestMember testMethod = new TestMember(c.BaseClass, baseTestMethod); if (testMember.Member.IsVirtual) { if (!testMembers.Contains(testMember.Name)) { testMembers.Add(testMethod); @@ -313,7 +313,7 @@ namespace ICSharpCode.UnitTesting baseClassesFQNames.Clear(); foreach (var memberDeclaringClass in testMembers.Select(member => member.DeclaringType).Distinct()) - if (memberDeclaringClass != declaringType) + if (memberDeclaringClass.CompareTo(declaringType) != 0) baseClassesFQNames.Add(memberDeclaringClass.FullyQualifiedName); return testMembers; } diff --git a/src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs b/src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs index 00b089c9d4..2bffc7fb53 100644 --- a/src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs +++ b/src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs @@ -37,6 +37,14 @@ namespace UnitTesting.Tests.Frameworks Assert.IsTrue(testFramework.IsTestClass(mockClass)); } + [Test] + public void IsTestClassReturnsFalseWhenClassHasTestFixtureAttributeAndIsAbstract() { + MockAttribute testAttribute = new MockAttribute("TestFixture"); + MockClass mockClass = MockClass.CreateMockClassWithAttribute(testAttribute); + mockClass.Modifiers = mockClass.Modifiers | ModifierEnum.Abstract; + Assert.IsFalse(testFramework.IsTestClass(mockClass)); + } + [Test] public void IsTestClassReturnsTrueHasClassHasTestFixtureAttribute() { diff --git a/src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs b/src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs index c78696cf9f..cfad7a37c4 100644 --- a/src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs +++ b/src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs @@ -34,7 +34,7 @@ namespace UnitTesting.Tests.Project projectContent.Classes.Add(c); // Add first method. - MockMethod method = new MockMethod(c, "MyTest"); + var method = new MockMethod(c, "MyTest"); method.Attributes.Add(new MockAttribute("Test")); c.Methods.Add(method); @@ -46,8 +46,10 @@ namespace UnitTesting.Tests.Project baseClass.Attributes.Add(new MockAttribute("TestFixture")); projectContent.Classes.Add(baseClass); c.AddBaseClass(baseClass); - baseClass.Methods.Add(method); - baseClass.Methods.Add(method); + var baseClassMethod = new MockMethod(baseClass, "MyTest"); + baseClassMethod.Attributes.Add(new MockAttribute("Test")); + baseClass.Methods.Add(baseClassMethod); + baseClass.Methods.Add(baseClassMethod); // Create test class. testClass = new TestClass(c, testFrameworks); @@ -65,7 +67,7 @@ namespace UnitTesting.Tests.Project [Test] public void TestMethodName() { - Assert.AreEqual("MyTestFixtureBase.MyTest", testClass.TestMembers[0].Name); + Assert.AreEqual("MyTest", testClass.TestMembers[0].Name); } [Test]