Reputation: 9036
I keep the test data for specific test method in folder named the same as function. I previously had the same function call in each [TestMethod]
, ClearAllAndLoadTestMethodData()
which determined the method name via StackTrace
. Now, I moved this function to [TestInitialize]
. How can I find the name of the method that is about to be executed?
I thought TestContext
provide this. I have access to it via [AssemblyInitialize()]
and on first run its property Name
is set to name of the testmethod. However, later this doesn't change (if I save the object in static field).
Upvotes: 13
Views: 4273
Reputation: 924
[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()
{
}
}
Upvotes: 0
Reputation: 9783
The AssemblyInitialize method is executed only once before all your tests.
Use the TestContext
inside the TestInitialize
method:
[TestClass]
public class TestClass
{
[TestInitialize]
public void TestIntialize()
{
string testMethodName = TestContext.TestName;
}
[TestMethod]
public void TestMethod()
{
}
public TestContext TestContext { get; set; }
}
Upvotes: 26