Grundlegendes zum MSTest-Testkontext

Unter Verwendung von MSTest musste ich den Namen des aktuellen Tests aus dem Internet abrufen[TestInitialize] Methode. Sie können dies von der bekommenTestContext.TestName Eigentum.

Ich habe einen unerwarteten Unterschied im Verhalten zwischen einer statischen gefundenTestContext das ist in die übergeben[ClassInitialize] Methode und eine, die als öffentliche Eigenschaft deklariert ist (und vom Testläufer festgelegt wird).

Betrachten Sie den folgenden Code:

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); }
    }
}

Dadurch wird Folgendes ausgegeben (kopiert und aus der Ausgabe des Resharper-Testläufers in VS2013 eingefügt):

TestContext.TestName='TestMethod1'  static _testContext.TestName='TestMethod1'
TestContext.TestName='TestMethod2'  static _testContext.TestName='TestMethod1'
TestContext.TestName='TestMethod3'  static _testContext.TestName='TestMethod1'

Ich hatte vorher angenommen, dass die beiden Instanzen vonTestContext wäre gleichwertig, aber eindeutig nicht.

Daspublic TestContext Eigentum verhält sich wie ich es erwarteDasprivate static TestContext Wert, der an das übergeben wird[ClassInitialize] Methode nicht. Schon seitTestContext Hat Eigenschaften, die sich auf den aktuell ausgeführten Test beziehen, erscheint diese Implementierung irreführend und fehlerhaft

Gibt es ein Szenario, in dem Sie eigentlich lieber die verwenden würden?TestContext übergeben an die[ClassInitialize] Methode, oder es wird am besten ignoriert und nie verwendet?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage