Browse Source

Abstract classes are not shown as nunit test fixtures in test pad.

Fixed StackOverflowError when updating test class members from new compilation unit.
pull/23/head
Tomasz Tretkowski 14 years ago
parent
commit
262636115d
  1. 2
      src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs
  2. 4
      src/AddIns/Analysis/UnitTesting/Src/TestClass.cs
  3. 8
      src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs
  4. 10
      src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs

2
src/AddIns/Analysis/UnitTesting/Src/NUnitTestFramework.cs

@ -44,6 +44,8 @@ namespace ICSharpCode.UnitTesting
/// </summary> /// </summary>
public bool IsTestClass(IClass c) public bool IsTestClass(IClass c)
{ {
if (c == null) return false;
if (c.IsAbstract) return false;
StringComparer nameComparer = GetNameComparer(c); StringComparer nameComparer = GetNameComparer(c);
if (nameComparer != null) { if (nameComparer != null) {
NUnitTestAttributeName testAttributeName = new NUnitTestAttributeName("TestFixture", nameComparer); NUnitTestAttributeName testAttributeName = new NUnitTestAttributeName("TestFixture", nameComparer);

4
src/AddIns/Analysis/UnitTesting/Src/TestClass.cs

@ -297,7 +297,7 @@ namespace ICSharpCode.UnitTesting
{ {
foreach (var testMember in testFrameworks.GetTestMembersFor(c.BaseClass)) { foreach (var testMember in testFrameworks.GetTestMembersFor(c.BaseClass)) {
BaseTestMember baseTestMethod = new BaseTestMember(declaringType, testMember.Member); 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 (testMember.Member.IsVirtual) {
if (!testMembers.Contains(testMember.Name)) { if (!testMembers.Contains(testMember.Name)) {
testMembers.Add(testMethod); testMembers.Add(testMethod);
@ -313,7 +313,7 @@ namespace ICSharpCode.UnitTesting
baseClassesFQNames.Clear(); baseClassesFQNames.Clear();
foreach (var memberDeclaringClass in testMembers.Select(member => member.DeclaringType).Distinct()) foreach (var memberDeclaringClass in testMembers.Select(member => member.DeclaringType).Distinct())
if (memberDeclaringClass != declaringType) if (memberDeclaringClass.CompareTo(declaringType) != 0)
baseClassesFQNames.Add(memberDeclaringClass.FullyQualifiedName); baseClassesFQNames.Add(memberDeclaringClass.FullyQualifiedName);
return testMembers; return testMembers;
} }

8
src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitTestFrameworkIsTestClassTests.cs

@ -37,6 +37,14 @@ namespace UnitTesting.Tests.Frameworks
Assert.IsTrue(testFramework.IsTestClass(mockClass)); 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] [Test]
public void IsTestClassReturnsTrueHasClassHasTestFixtureAttribute() public void IsTestClassReturnsTrueHasClassHasTestFixtureAttribute()
{ {

10
src/AddIns/Analysis/UnitTesting/Test/Project/DuplicateMethodNameTestFixture.cs

@ -34,7 +34,7 @@ namespace UnitTesting.Tests.Project
projectContent.Classes.Add(c); projectContent.Classes.Add(c);
// Add first method. // Add first method.
MockMethod method = new MockMethod(c, "MyTest"); var method = new MockMethod(c, "MyTest");
method.Attributes.Add(new MockAttribute("Test")); method.Attributes.Add(new MockAttribute("Test"));
c.Methods.Add(method); c.Methods.Add(method);
@ -46,8 +46,10 @@ namespace UnitTesting.Tests.Project
baseClass.Attributes.Add(new MockAttribute("TestFixture")); baseClass.Attributes.Add(new MockAttribute("TestFixture"));
projectContent.Classes.Add(baseClass); projectContent.Classes.Add(baseClass);
c.AddBaseClass(baseClass); c.AddBaseClass(baseClass);
baseClass.Methods.Add(method); var baseClassMethod = new MockMethod(baseClass, "MyTest");
baseClass.Methods.Add(method); baseClassMethod.Attributes.Add(new MockAttribute("Test"));
baseClass.Methods.Add(baseClassMethod);
baseClass.Methods.Add(baseClassMethod);
// Create test class. // Create test class.
testClass = new TestClass(c, testFrameworks); testClass = new TestClass(c, testFrameworks);
@ -65,7 +67,7 @@ namespace UnitTesting.Tests.Project
[Test] [Test]
public void TestMethodName() public void TestMethodName()
{ {
Assert.AreEqual("MyTestFixtureBase.MyTest", testClass.TestMembers[0].Name); Assert.AreEqual("MyTest", testClass.TestMembers[0].Name);
} }
[Test] [Test]

Loading…
Cancel
Save