Управляемые данными тесты, созданные в ClassInitialize: больше не работают в Visual Studio 2012

Я обновил Visual Studio 2010 до Visual Studio 2012.

В моем проекте модульного тестирования у меня есть метод [ClassInitialize], который генерирует файл CSV, который я затем передаю в управляемый данными [TestMethod], используя [DataSource], подключенный к CSV.

Это прекрасно работает в Visual Studio 2010.

Я не могу заставить это работать в Visual Studio 2012.

Похоже, что в VS2012 организатор тестов MS требует, чтобы файл, связанный с [DataSource], уже существовал, иначе ни один из тестов не будет запущен. Если я сам создаю CSV, запускаются управляемые данными тесты, но они не собирают данные, созданные в [ClassInitialize]: кажется, что список тестов из [DataSource] оценивается ДО запуска [ClassInitialize].

Есть ли обходной путь?

Это минимальный проект, который воспроизводит проблему. Для меня это успешно в VS2010, но не в 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);
        }
    }
}

В моем случае 'запустить тест как 32-битный является настройкой по умолчанию; это может быть изменено в -

в VS2012: ТЕСТ> TestSettings> Архитектура процессора по умолчаниюв VS2010 Щелкните правой кнопкой мыши Solution Explorer 'Элементы решения » > Добавить> Новый предмет> Настройки теста, тогдаГлавное меню VS2010> Тесты> Изменить настройки теста> Хосты> Выполните тесты в 32-битном или 64-битном процессе.

Если вы используете 64-битную версию, используйте [DataSource ("CsvTestData64")], и вам может потребоваться установить64-разрядный драйвер ODBC для MS Access, Самый простой способ - придерживаться 32-битного.

App.config



  
    
  

  
    
      
      
    
  

  
    
    
  

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

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