找出要在MS TestInitialize中执行的下一个测试方法

时间:2012-08-30 09:56:56

标签: c# unit-testing vs-unit-testing-framework

我将特定测试方法的测试数据保存在与函数相同的文件夹中。我以前在每个[TestMethod] ClearAllAndLoadTestMethodData()中都有相同的函数调用,它通过StackTrace确定了方法名称。现在,我将此功能移至[TestInitialize]。如何找到即将执行的方法的名称?

我认为TestContext提供了这个。我可以通过[AssemblyInitialize()]访问它,并在第一次运行时将其属性Name设置为testmethod的名称。但是,稍后这不会改变(如果我将对象保存在静态字段中)。

2 个答案:

答案 0 :(得分:19)

AssemblyInitialize方法在所有测试之前只执行一次。

使用TestContext方法中的TestInitialize

[TestClass]
public class TestClass
{
    [TestInitialize]
    public void TestIntialize()
    {
        string testMethodName = TestContext.TestName;
    }

    [TestMethod]
    public void TestMethod()
    {
    }

    public TestContext TestContext { get; set; }
}

答案 1 :(得分:0)

[TestClass]
public class MyTestClass
{
    private static TestContext _testContext;

    [ClassInitialize]
    public static void TestFixtureSetup(TestContext context)
    {
        _testContext = context;
    }

    [TestInitialize]
    public void TestIntialize()
    {
        string testMethodName = MyTestClass._testContext.TestName;
        switch (testMethodName)
        {
            case "TestMethodA":

                //todo..

                break;
            case "TestMethodB":

                //todo..

                break;              
            default:
                break;
        }
    }

    [TestMethod]
    public void TestMethodA()
    {
    }

    [TestMethod]
    public void TestMethodB()
    {
    }   
}