Понимание MSTest TestContext
Используя MSTest, мне нужно было получить название текущего теста из[TestInitialize]
метод. Вы можете получить это отTestContext.TestName
имущество.
Я обнаружил неожиданную разницу в поведении между статическимиTestContext
что передается в[ClassInitialize]
метод и тот, который объявлен как открытое свойство (и устанавливается бегуном теста).
Рассмотрим следующий код:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestContext.Tests
{
[TestClass]
public class UnitTest1
{
public TestContext TestContext { get; set; }
private static TestContext _testContext;
[ClassInitialize]
public static void SetupTests(TestContext testContext)
{
_testContext = testContext;
}
[TestInitialize]
public void SetupTest()
{
Console.WriteLine(
"TestContext.TestName='{0}' static _testContext.TestName='{1}'",
TestContext.TestName,
_testContext.TestName);
}
[TestMethod] public void TestMethod1() { Assert.IsTrue(true); }
[TestMethod] public void TestMethod2() { Assert.IsTrue(true); }
[TestMethod] public void TestMethod3() { Assert.IsTrue(true); }
}
}
Это приводит к выводу следующего (скопированного из выходных данных тестера Resharper в VS2013):
TestContext.TestName='TestMethod1' static _testContext.TestName='TestMethod1'
TestContext.TestName='TestMethod2' static _testContext.TestName='TestMethod1'
TestContext.TestName='TestMethod3' static _testContext.TestName='TestMethod1'
Ранее я предполагал, что два случаяTestContext
было бы эквивалентно, но, очевидно, это не так.
public TestContext
собственность ведет себя как я ожидаюprivate static TestContext
значение, которое передается в[ClassInitialize]
метод не. посколькуTestContext
имеет свойства, которые относятся к текущему тесту, эта реализация вводит в заблуждение и не работаетЕсть ли сценарий, где вы бы предпочли использоватьTestContext
перешел к[ClassInitialize]
метод или его лучше игнорировать и никогда не использовать?