Browse Source

Check all base classes for unit test methods not just the immediate test class parent.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@5075 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 16 years ago
parent
commit
cf9adbb9ba
  1. 14
      src/AddIns/Misc/UnitTesting/Src/TestClass.cs
  2. 104
      src/AddIns/Misc/UnitTesting/Test/Project/TwoBaseClassesWithTestMethodsTestFixture.cs
  3. 1
      src/AddIns/Misc/UnitTesting/Test/UnitTesting.Tests.csproj

14
src/AddIns/Misc/UnitTesting/Src/TestClass.cs

@ -323,16 +323,18 @@ namespace ICSharpCode.UnitTesting @@ -323,16 +323,18 @@ namespace ICSharpCode.UnitTesting
}
// Add base class test methods.
if (c.BaseClass != null) {
IClass declaringType = c;
while (c.BaseClass != null) {
foreach (IMethod method in c.BaseClass.Methods) {
if (TestMethod.IsTestMethod(method)) {
BaseTestMethod baseTestMethod = new BaseTestMethod(c, method);
BaseTestMethod baseTestMethod = new BaseTestMethod(declaringType, method);
TestMethod testMethod = new TestMethod(c.BaseClass.Name, baseTestMethod);
if (!testMethods.Contains(testMethod.Name)) {
testMethods.Add(testMethod);
}
}
}
c = c.BaseClass;
}
return testMethods;
}
@ -381,10 +383,14 @@ namespace ICSharpCode.UnitTesting @@ -381,10 +383,14 @@ namespace ICSharpCode.UnitTesting
TestMethod GetPrefixedTestMethod(string testResultName)
{
IClass baseClass = c.BaseClass;
if (baseClass != null) {
while (baseClass != null) {
string methodName = TestMethod.GetMethodName(testResultName);
string actualMethodName = String.Concat(baseClass.Name, ".", methodName);
return GetTestMethod(actualMethodName);
TestMethod method = GetTestMethod(actualMethodName);
if (method != null) {
return method;
}
baseClass = baseClass.BaseClass;
}
return null;
}

104
src/AddIns/Misc/UnitTesting/Test/Project/TwoBaseClassesWithTestMethodsTestFixture.cs

@ -0,0 +1,104 @@ @@ -0,0 +1,104 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.UnitTesting;
using NUnit.Framework;
using System;
using UnitTesting.Tests.Utils;
namespace UnitTesting.Tests.Project
{
/// <summary>
/// Tests that the test methods of a second parent base class are detected:
///
/// class BaseBaseTestFixture { [Test] public void BaseBaseTest() ... }
/// class BaseTestFixture : BaseBaseTestFixture ...
/// class TestFixture : BaseTestFixture
/// </summary>
[TestFixture]
public class TwoBaseClassesWithTestMethodsTestFixture
{
TestClass testClass;
MockClass c;
[SetUp]
public void SetUp()
{
MockProjectContent projectContent = new MockProjectContent();
projectContent.Language = LanguageProperties.None;
// Create the top base test class.
MockClass baseBaseClass = new MockClass("ICSharpCode.SharpDevelop.Tests.BaseBaseTestFixture");
baseBaseClass.ProjectContent = projectContent;
MockMethod baseMethod = new MockMethod("BaseBaseTest");
baseMethod.Attributes.Add(new MockAttribute("Test"));
baseMethod.DeclaringType = baseBaseClass;
baseBaseClass.Methods.Add(baseMethod);
// Create the next level test class.
MockClass baseClass = new MockClass("ICSharpCode.SharpDevelop.Tests.BaseTestFixture");
baseClass.ProjectContent = projectContent;
baseMethod = new MockMethod("BaseTest");
baseMethod.Attributes.Add(new MockAttribute("Test"));
baseMethod.DeclaringType = baseClass;
baseClass.Methods.Add(baseMethod);
// Create the derived test class.
c = new MockClass("ICSharpCode.SharpDevelop.Tests.MainTestFixture");
c.Attributes.Add(new MockAttribute("TestFixture"));
c.ProjectContent = projectContent;
projectContent.Classes.Add(c);
// Set the base class for each class in the hierarchy.
c.BaseClass = baseClass;
baseClass.BaseClass = baseBaseClass;
// Create TestClass.
testClass = new TestClass(c);
}
[Test]
public void BaseBaseTestMethodExists()
{
Assert.IsTrue(testClass.TestMethods.Contains("BaseBaseTestFixture.BaseBaseTest"));
}
[Test]
public void BaseMethodExists()
{
Assert.IsTrue(testClass.TestMethods.Contains("BaseTestFixture.BaseTest"));
}
/// <summary>
/// The TestMethod.Method property should return an IMethod
/// that returns the derived class from the DeclaringType property
/// and not the base class. This ensures that the correct
/// test is run when selected in the unit test tree.
/// </summary>
[Test]
public void BaseBaseMethodDeclaringTypeIsDerivedClass()
{
TestMethod method = testClass.TestMethods["BaseBaseTestFixture.BaseBaseTest"];
Assert.AreEqual(c, method.Method.DeclaringType);
}
[Test]
public void UpdateTestResult()
{
TestClassCollection testClasses = new TestClassCollection();
testClasses.Add(testClass);
TestResult testResult = new TestResult("ICSharpCode.SharpDevelop.Tests.MainTestFixture.BaseBaseTest");
testResult.IsFailure = true;
testClasses.UpdateTestResult(testResult);
Assert.AreEqual(TestResultType.Failure, testClass.Result);
}
}
}

1
src/AddIns/Misc/UnitTesting/Test/UnitTesting.Tests.csproj

@ -69,6 +69,7 @@ @@ -69,6 +69,7 @@
<Compile Include="Project\InnerClassTestFixtureAttributeRemovedTestFixture.cs" />
<Compile Include="Project\InnerClassTestFixtureBase.cs" />
<Compile Include="Project\RemovedClassesTestFixture.cs" />
<Compile Include="Project\TwoBaseClassesWithTestMethodsTestFixture.cs" />
<Compile Include="TestableConditionTests.cs" />
<Compile Include="Tree\MultipleTestProjectsTestFixture.cs" />
<Compile Include="Tree\TreeNodeContextMenuTestFixture.cs" />

Loading…
Cancel
Save