通过使用[Setup]方法中的代码输出当前测试的名称

时间:2009-05-12 22:25:27

标签: c# nunit

我目前在所有测试的顶部都有一行,如下所示:

Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name); 

如果我可以把它放在我的Init方法(用[Setup]标记的那个)中,这似乎很好。我认为这会有效,但无论我为堆栈帧放入什么数字,我能得到的最接近的是Init。不是我想要的,但非常接近:

string methodName = new StackFrame(0).GetMethod().Name;
Console.WriteLine(methodName);

考虑到Nunit运行测试的方式,我认为这可能是不可能的。

为什么这样,你说呢?因为在我的控制台输出中,很高兴看到新测试的开始位置,所以如果它们都使用相同的代码并输出不同的值,我将知道哪一个做了什么,而无需调试。

4 个答案:

答案 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获取当前的测试名称。