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

C# 使用[Setup]方法中的代码输出当前测试的名称,c#,nunit,C#,Nunit,我在所有测试的顶部都有一条线,如下所示: Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name); 如果我能把它放在我的Init方法中(用[Setup]标记的方法),那就太好了。我原以为这会奏效,但无论我为堆栈帧输入什么数字,我能得到的最接近的是Init。不是我想要的,但非常接近: string methodName = new StackFrame(0).GetMethod().Name; Consol

我在所有测试的顶部都有一条线,如下所示:

Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name); 
如果我能把它放在我的Init方法中(用
[Setup]
标记的方法),那就太好了。我原以为这会奏效,但无论我为堆栈帧输入什么数字,我能得到的最接近的是
Init
。不是我想要的,但非常接近:

string methodName = new StackFrame(0).GetMethod().Name;
Console.WriteLine(methodName);
考虑到Nunit运行测试的方式,我认为这可能是不可能的


你说这是为什么?因为在我的控制台输出中,最好能看到新测试从何处开始,所以如果它们都命中相同的代码并输出不同的值,我就可以知道哪一个做了什么,而无需调试

您可以使用NUnit.Core.NUnitFramework.TestCaseAttribute来获取当前的测试名称。

直到NUnit 2.5才添加TestCaseAttribute,这可能是您找不到它的原因。但是它无论如何也不会有帮助——不幸的是,SetUp方法是在测试方法之前调用的,而不是在测试方法的上下文中调用的(因此它不会显示在调用堆栈中)


幸运的是,NUnit已经支持您正在尝试的操作!在GUI中,转到工具>选项>GUI>常规>文本输出并选中“显示测试用例标签”。或者,对于console runner,只需在参数中添加
/labels

以下内容可以帮助我:

string testName = NUnit.Framework.TestContext.CurrentContext.Test.Name;
string testFullName = NUnit.Framework.TestContext.CurrentContext.Test.FullName;

下面是我用来将每个测试记录到文件中的VB:

<SetUp()>
Public Sub Setup()
   Logging.logTest(NUnit.Framework.TestContext.CurrentContext.Test.Name)
End Sub

公共子设置()
logTest(NUnit.Framework.TestContext.CurrentContext.Test.Name)
端接头

第一个问题是这并不存在。我发现的最接近的是<代码> nNo.C.NunITFrase.TestStutoStudio,它返回了一个值<代码>“NUng.Frask.TestStuturts”。@ MiWIL的答案是一个更好的解决方案——您是否会考虑更改所接受的答案?