是否有某些全局状态我可以访问当前运行的测试名称?
我有测试将文件输出到一个目录中并将其读回。我希望每个测试都能创建一个目录,然后自行清理,我不想在那里推送该名称(我必须让它独一无二,然后确保每个测试都保持独特; ew)。我可以使用GUID,但我希望帮助方法能够假设“这是应该存储测试文件的地方”,而不必将GUID推送到它们。再一次,这是一个全球状态的螺旋钻。
基本上,我想要一个像TestRunner.Current.CurrentTest.Name
这样的电话。这样的事情存在吗?
答案 0 :(得分:31)
(假设c#)
NUnit.Framework.TestContext.CurrentContext.Test.Name
或
NUnit.Framework.TestContext.CurrentContext.Test.FullName
或者如果你真的很懒,并且没有使用TestCaseSource进行测试(感谢@aolszowka):
this.GetType().ToString()
答案 1 :(得分:23)
我还没有升级到2.5.7,但它包含一个TestContext
类,它似乎只能提供您正在寻找的内容:http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7
答案 2 :(得分:4)
假设每个Test有一个方法,在NUnit代码中,您可以使用反射从堆栈跟踪中获取方法名称。
如果您在其他方法调用的NUnit代码中编写辅助方法来执行此文件记录,则可以使用此语法检查上一个方法:
string MethodName = new StackFrame(1).GetMethod().Name;
有关详细信息,请参阅question 44153, "Can you use reflection to find the name of the currently executing method?"的答案。
答案 3 :(得分:0)
如果我们使用 TestCaseSource 标签,那么上述解决方案可能无法给出正确答案
尝试使用 TestContext.CurrentContext.Test.MethodName
按照下面的例子
namespace NunitTests
{
public class Class1
{
static List<TestData> Data = new List<TestData>()
{
new TestData()
{
...
}
};
[Test]
[TestCaseSource(nameof(TenMBInstance))]
public void TestCase(TestData value)
{
TestContext.CurrentContext.Test.Name; //TestCase(NunitTests..TestData)
TestContext.CurrentContext.Test.MethodName; //TestCase
}
}
}