Понимание 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] метод или его лучше игнорировать и никогда не использовать?

Ответы на вопрос(3)

Ваш ответ на вопрос