0
Nunit(2.6.4)用のTestDecorator Addinを作成しようとしています。 しかし、アドインを有効にすると、デコレータ自体は何もしない場合でも、装飾テストのセットアップとティアダウンを実行できなくなります(下の図のようにすべての呼び出しを実際のテストに延期します)。TestDecorator Addinを使用しているときにNunit SetUpとTearDownが実行されない
なぜこれでSetUp/TearDownが実行されないのでしょうか?
デコレータ:
public class DoNothingTestDecorator : Test
{
private readonly Test concrete;
public DoNothingTestDecorator(Test concrete) : base(concrete.TestName)
{
this.concrete = concrete;
}
public override TestResult Run(EventListener listener, ITestFilter filter)
{
return concrete.Run(listener, filter);
}
public override string TestType
{
get { return concrete.TestType; }
}
public override object Fixture
{
get { return concrete.Fixture; }
set { concrete.Fixture = value; }
}
public override int CountTestCases(ITestFilter filter)
{
return concrete.CountTestCases(filter);
}
public override Type FixtureType
{
get { return concrete.FixtureType; }
}
public override bool Equals(object obj)
{
return concrete.Equals(obj);
}
public override int GetHashCode()
{
return concrete.GetHashCode();
}
public override bool IsSuite
{
get { return concrete.IsSuite; }
}
public override string MethodName
{
get { return concrete.MethodName; }
}
public override int TestCount
{
get { return concrete.TestCount; }
}
public override IList Tests
{
get { return concrete.Tests; }
}
public override string ToString()
{
return concrete.ToString();
}
}
アドイン:
[NUnitAddin(
Type=ExtensionType.Core,
Name = "TestDecoratorAddin",
Description="Attempts to decorate a test without changing its behavior")
]
public class TestDecoratorAddin : ITestDecorator, IAddin
{
public bool Install(IExtensionHost host)
{
IExtensionPoint testDecorators = host.GetExtensionPoint("TestDecorators");
if (testDecorators == null)
return false;
testDecorators.Install(this);
return true;
}
public Test Decorate(Test test, MemberInfo member)
{
if (test.Properties.Contains("DecorateMe"))
return new DoNothingTestDecorator(test);
return test;
}
}
試験:
[TestFixture]
public class TestToBeDecorated
{
private bool setupRan = false;
[SetUp]
public void SetUp()
{
setupRan = true;
}
[TearDown]
public void TearDown()
{
setupRan = false;
}
[Test]
[Property("DecorateMe",1)]
public void TestDecorated() // Fails
{
Assert.That(setupRan);
}
[Test]
[Property("Nothing",1)]
public void TestUnDecorated() // Passes
{
Assert.That(setupRan);
}
}
NUnitの出力
>nunit-console ExampleTests.dll
NUnit-Console version 2.6.4.14350
Copyright (C) 2002-2012 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Microsoft Windows NT 6.2.9200.0
CLR Version: 2.0.50727.8009 (Net 3.5)
ProcessModel: Default DomainUsage: Single
Execution Runtime: net-3.5
.F.
Tests run: 2, Errors: 0, Failures: 1, Inconclusive: 0, Time: 0.0489326845238935 seconds
Not run: 0, Invalid: 0, Ignored: 0, Skipped: 0
Errors and Failures:
1) Test Failure : ExampleTests.TestToBeDecorated.TestDecorated
Expected: True
But was: False
はもっとありますか?あなたはそれをインストールするアドインコードではなく、テスト自体を置き換えるクラスだけを掲示しました。 – Charlie
編集:インストールコードとサンプルテストを追加 – Murray