Testy oparte na danych generowane w ClassInitialize: nie działają już w Visual Studio 2012
Zaktualizowałem program Visual Studio 2010 do Visual Studio 2012.
W moim projekcie testu jednostkowego mam metodę [ClassInitialize], która generuje plik CSV, który następnie przesyłam do sterowanego danymi [TestMethod] przy użyciu [DataSource] połączonego z CSV.
To działa świetnie w Visual Studio 2010.
Nie mogę tego uruchomić w Visual Studio 2012.
Wydaje się, że w VS2012 biegacz testowy MS wymaga, aby plik podłączony do [DataSource] już istniał, inaczej żaden test nie zostanie uruchomiony. Jeśli sam tworzę CSV, uruchamiane są testy oparte na danych, ale nie wychwytują danych utworzonych w [ClassInitialize]: wygląda na to, że lista testów z [DataSource] jest oceniana PRZED uruchomieniem [ClassInitialize].
Czy jest w pobliżu praca?
Jest to minimalny projekt, który odtwarza problem. Dla mnie to się udaje w VS2010, ale kończy się niepowodzeniem w VS2012.
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);
}
}
}
W moim przypadku „test uruchamiania jako 32-bitowy” jest ustawieniem domyślnym; można to zmienić pod -
w VS2012: TEST> Ustawienia testowe> Domyślna architektura procesoraw VS2010 Kliknij prawym przyciskiem myszy Eksplorator rozwiązań „Elementy rozwiązania”> Dodaj> Nowy element> Testuj ustawienia, a następnie,VS2010 menu główne> Testy> Edytuj ustawienia testu> Hosty> Uruchom testy w procesie 32-bitowym lub 64-bitowym.Jeśli używasz 64-bitowego, użyj [DataSource („CsvTestData64”)]] i może być konieczne zainstalowanieSterownik ODBC MS Access 64-bit. Najłatwiej jest trzymać się wersji 32-bitowej.
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>