我想通过我正在使用的辅助方法来获取当前正在执行的NUnit测试.我们实际上是在这里使用NUnit进行集成测试,而不是单元测试.测试完成后,我们希望测试完成后清除一些日志文件.目前,我已经使用StackFrame类来解决这个问题:
class TestHelper
{
string CurrentTestFixture;
string CurrentTest;
public TestHelper()
{
var callingFrame = new StackFrame(1);
var method = callingFrame.GetMethod();
CurrentTest = method.Name;
var type = method.DeclaringType;
CurrentTestFixture = type.Name;
}
public void HelperMethod()
{
var relativePath = Path.Combine(CurrentTestFixture, CurrentTest);
Directory.Delete(Path.Combine(Configurator.LogPath, relativePath));
}
}
[TestFixture]
class Fix
{
[Test]
public void MyTest()
{
var helper = new TestHelper();
//Do other testing stuff
helper.HelperMethod();
}
[Test]
public void MyTest2()
{
var helper = new TestHelper();
//Do some more testing stuff
helper.HelperMethod();
}
}
这工作得很好,除了在某些情况下我想使TestHelper类成为我的固定装置的一部分外,像这样:
[TestFixture]
class Fix
{
private TestHelper helper;
[Setup]
public void Setup()
{
helper = new TestHelper();
}
[TearDown]
public void TearDown()
{
helper.HelperMethod();
}
[Test]
public void MyTest()
{
//Do other testing stuff
}
[Test]
public void MyTest2()
{
//Do some more testing stuff
}
}
我不能简单地使此类成为全局夹具,因为有时单个测试会多次使用它,而有时测试根本不需要使用它.有时,测试需要将特定属性附加到TestHelper ….之类的东西.
结果,我希望能够以某种方式获得当前正在执行的测试,而不必手动重复夹具的名称并在我正在查看的数千个测试用例中进行测试.
有没有办法获取这些信息?
解决方法:
NUnit 2.5.7添加了一个“实验” TestContext类.它包含的属性之一是TestName.我还没有尝试过,所以我不知道该信息是否在TearDown方法中可用.