我目前在所有测试的顶部都有一行,如下所示:
Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name);
如果我可以把它放在我的Init方法(用[Setup]
标记的那个)中,这似乎很好。我认为这会有效,但无论我为堆栈帧放入什么数字,我能得到的最接近的是Init
。不是我想要的,但非常接近:
string methodName = new StackFrame(0).GetMethod().Name;
Console.WriteLine(methodName);
考虑到Nunit运行测试的方式,我认为这可能是不可能的。
为什么这样,你说呢?因为在我的控制台输出中,很高兴看到新测试的开始位置,所以如果它们都使用相同的代码并输出不同的值,我将知道哪一个做了什么,而无需调试。
答案 0 :(得分:13)
以下内容可以帮助我:
string testName = NUnit.Framework.TestContext.CurrentContext.Test.Name;
string testFullName = NUnit.Framework.TestContext.CurrentContext.Test.FullName;
答案 1 :(得分:6)
直到NUnit 2.5才添加TestCaseAttribute,这可能就是为什么你找不到它。但它无论如何都没有用 - 不幸的是,SetUp方法在测试方法之前调用,而不是在测试方法的上下文中调用(所以它不会出现在调用堆栈中)。
幸运的是,NUnit已经支持你要做的事了!从GUI,转到工具>选项> GUI>一般>文本输出并选中“显示TestCase标签”。或者,对于控制台运行器,只需将/labels
添加到参数中。
答案 2 :(得分:1)
这是我用来将每个测试记录到文件的VB:
<SetUp()>
Public Sub Setup()
Logging.logTest(NUnit.Framework.TestContext.CurrentContext.Test.Name)
End Sub
答案 3 :(得分:0)
您可以使用NUnit.Core.NUnitFramework.TestCaseAttribute获取当前的测试名称。