In ClassInitialize generierte datengesteuerte Tests funktionieren in Visual Studio 2012 nicht mehr

Ich habe ein Upgrade von Visual Studio 2010 auf Visual Studio 2012 durchgeführt.

In meinem Unit-Test-Projekt habe ich eine [ClassInitialize] -Methode, die eine CSV-Datei generiert, die ich dann unter Verwendung der mit der CSV verbundenen [DataSource] in eine datengesteuerte [TestMethod] einspeise.

Dies funktioniert hervorragend in Visual Studio 2010.

Ich kann dies in Visual Studio 2012 nicht zum Laufen bringen.

Es scheint, dass der MS-Testläufer in VS2012 die mit der [DataSource] verbundene Datei bereits benötigt, da sonst keiner der Tests ausgeführt wird. Wenn ich die CSV selbst erstelle, werden die datengesteuerten Tests ausgeführt, die in [ClassInitialize] erstellten Daten werden jedoch nicht abgerufen: Es scheint, dass die Liste der Tests aus der [DataSource] VOR der Ausführung von [ClassInitialize] ausgewertet wird.

Gibt es eine Problemumgehung?

Dies ist ein Minimalprojekt, das das Problem reproduziert. Für mich ist dies in VS2010 erfolgreich, aber in VS2012 schlägt dies fehl.

TestProject.cs

using System.Diagnostics;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace TestProject
{
    [TestClass]
    public class DataDrivenUnitTest
    {
        private static bool _classInitializeCalled;
        private static int _testCount;

        public TestContext TestContext { get; set; }

        [ClassInitialize]
        public static void ClassInitialize(TestContext testContext)
        {
            // Generate the csv list of tests
            //TestContext = testContext;
            _classInitializeCalled = true;
            string testDirectory;
            testDirectory = testContext.DeploymentDirectory;
            using (var f = new StreamWriter(testDirectory + @"\" + "TestList.csv"))
            {
                f.WriteLine("TestName");
                f.WriteLine("TestA");
                f.WriteLine("TestB");
            }
        }

        [TestMethod]
        [DataSource("CsvTestData32")]
        public void TestMethod1()
        {
            _testCount++;
            var testName = TestContext.DataRow["TestName"];
            Debug.Print("Test {0}: {1}", _testCount, testName);
        }

        [ClassCleanup]
        public static void ClassCleanup()
        {
            Assert.IsTrue(_classInitializeCalled);
            Assert.AreEqual(_testCount, 2);
            Debug.Print("Tests completed: Tests run {0}", _testCount);
        }
    }
}

In meinem Fall ist "Test als 32-Bit ausführen" die Standardeinstellung. Dies kann geändert werden unter -

in VS2012: TEST> TestSettings> StandardprozessorarchitekturKlicken Sie in VS2010 mit der rechten Maustaste auf Solution Explorer 'Solution Items'> Hinzufügen> Neues Element> Testeinstellungen.VS2010-Hauptmenü> Tests> Testeinstellungen bearbeiten> Hosts> Tests im 32-Bit- oder 64-Bit-Prozess ausführen.

Wenn Sie 64-Bit verwenden, verwenden Sie [DataSource ("CsvTestData64")]. Möglicherweise müssen Sie das installierenMS Access 64-Bit-ODBC-Treiber. Am einfachsten ist es, sich an 32-Bit zu halten.

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="microsoft.visualstudio.testtools" type="Microsoft.VisualStudio.TestTools.UnitTesting.TestConfigurationSection, Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  </configSections>

  <microsoft.visualstudio.testtools>
    <dataSources>
      <add name="CsvTestData32" connectionString="CsvConn32" dataTableName="`TestList.csv`" dataAccessMethod="Sequential" />
      <add name="CsvTestData64" connectionString="CsvConn64" dataTableName="`TestTest.csv`" dataAccessMethod="Sequential" />
    </dataSources>
  </microsoft.visualstudio.testtools>

  <connectionStrings>
    <add name="CsvConn32" connectionString="Driver={Microsoft Text Driver (*.txt; *.csv)};.\;Extensions=csv;" providerName="System.Data.Odbc" />
    <add name="CsvConn64" connectionString="Driver={Microsoft Access Text Driver (*.txt, *.csv)};Dbq=.\;Extensions=csv" providerName="System.Data.Odbc" />
  </connectionStrings>
</configuration>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage