NUnit 2.6.3中SetUp获取测试名称返回AdhocTestMethod的问题
解决NUnit 2.6.3中SetUp方法获取测试名称显示"AdhocTestMethod"的问题
我之前也碰到过NUnit 2.6.3这个版本的这个坑——在SetUp里直接拿TestContext.CurrentContext.Test.Name,结果拿到的总是那个莫名其妙的"AdhocTestMethod",根本不是实际的测试方法名。给你两个可行的解决办法:
方法一:从测试属性中提取真实名称
在NUnit 2.6.3里,测试的真实名称其实已经存在于测试上下文的属性集合里了,你只需要换个方式获取:
[SetUp] public void SetUpFunc() { var actualTestName = TestContext.CurrentContext.Test.Properties["_TEST_NAME"].ToString(); // 这里actualTestName就会是"TestName123"了 }
方法二:升级到NUnit 3.x(如果项目允许的话)
如果你的项目可以升级测试框架版本,那直接升到NUnit 3.x就一劳永逸了。NUnit 3彻底重构了测试上下文的初始化逻辑,SetUp方法执行时上下文已经完全绑定了具体测试方法,你原来写的代码就能正常拿到正确的测试名称:
[SetUp] public void SetUpFunc() { var asd = TestContext.CurrentContext.Test.Name; // 这里会正确返回"TestName123" }
为啥会出现这个奇怪的名称?
简单说,这是NUnit 2.6.3的执行顺序问题——SetUp执行的时候,测试实例还没完全和具体的测试方法绑定,此时TestContext.CurrentContext.Test指向的是一个临时的占位对象,它的默认名称就是"AdhocTestMethod"。而真实的测试名称是在SetUp之后、测试方法执行之前才被注入到上下文的属性里,所以得通过Properties["_TEST_NAME"]去取。
内容的提问来源于stack exchange,提问作者user636312
相关产品推荐
相关产品推荐

