如何在TestMethod中访问TestAdapter与ExpectedResult?
问题1:在测试方法中访问TestAdapter
不同测试框架的实现方式不同,以下是两种主流框架的解决方案:
- NUnit框架:直接通过
TestContext.CurrentContext获取当前测试上下文,其中TestAdapter属性可直接访问TestAdapter实例:using NUnit.Framework; [TestFixture] public class MyTests { [Test] public void TestMethod() { var testAdapter = TestContext.CurrentContext.TestAdapter; // 在此处使用testAdapter } } - MSTest框架:MSTest并未直接公开TestAdapter属性。若确实需要访问,可通过自定义测试扩展或反射实现,但通常使用
TestContext即可获取绝大多数测试相关信息,无需直接操作TestAdapter。
问题2:获取测试用例的ExpectedResult值并实现判断逻辑
你提供的代码使用了NUnit的[TestCase(ExpectedResult)]特性,可通过TestContext提取当前测试用例的预期结果值,修改后的代码如下:
using NUnit.Framework; using FluentAssertions; [TestFixture] public class MyTests { [TestCase("Pass", ExpectedResult = 1)] [TestCase("Fail", ExpectedResult = 0)] [TestCase("PassDueToExpectError", ExpectedResult = -1)] public int Test(string msg) { int ret = 0; // 获取当前测试用例的ExpectedResult var testCaseAttr = TestContext.CurrentContext.Test .GetAttributes<TestCaseAttribute>(true) .FirstOrDefault(); int expectedValue = testCaseAttr?.ExpectedResult != null ? Convert.ToInt32(testCaseAttr.ExpectedResult) : 0; switch (msg) { case "Pass": return 1; default: ret = 0; break; } if (expectedValue < 0) { return -1; } ret.Should().BeGreaterThan(0); return 0; } }
核心说明:
- 通过
TestContext.CurrentContext.Test.GetAttributes<TestCaseAttribute>(true)获取当前执行的测试用例对应的TestCaseAttribute实例 - 从属性中提取
ExpectedResult并转换为int类型(可根据实际需求调整类型) - 直接使用转换后的
expectedValue完成条件判断,多TestCase场景下会自动匹配当前执行的用例预期值
内容的提问来源于stack exchange,提问作者Doc
相关产品推荐
相关产品推荐

