ClassCleanup в MSTest является статическим, но сервер сборки использует nunit для запуска модульных тестов. Как я могу настроить? - PullRequest
0 голосов
/ 20 мая 2010

MSTest имеет атрибут [ClassCleanup ()], который, насколько я могу судить, должен быть статическим.Я люблю пробежаться по окончании модульных тестов и очистить базу данных.Все это прекрасно работает, однако, когда я захожу на наш сервер сборки и использую наш скрипт сборки Nant, кажется, что модульные тесты запускаются с NUnit.NUnit, похоже, не любит метод очистки статичным.Поэтому он игнорирует мои тесты в этом классе.Что я могу сделать, чтобы исправить это?Я предпочитаю не использовать [TestCleanUp ()], так как он запускается после каждого теста.У кого-нибудь есть предложения?Я знаю, что [TestCleanup ()] помогает в разделении, но я действительно предпочитаю [ClassCleanup ()] в этой ситуации.Вот пример кода.

  ////Use ClassCleanup to run code after all tests have run
    [ClassCleanup()]
    public static void MyFacadeTestCleanup()
    {

        UpdateCleanup();

    }


    private static void UpdateCleanup()
    {
        DbCommand dbCommand;
        Database db;

        try
        {

            db = DatabaseFactory.CreateDatabase(TestConstants.DB_NAME);
            int rowsAffected;

            dbCommand = db.GetSqlStringCommand("DELETE FROM tblA WHERE biID=@biID");
            db.AddInParameter(dbCommand, "biID", DbType.Int64, biToDelete);
            rowsAffected = db.ExecuteNonQuery(dbCommand);
            Debug.WriteLineIf(rowsAffected == TestConstants.ONE_ROW, string.Format("biId '{0}' was successfully deleted.", biToDelete));

        } catch (SqlException ex) {



        } finally {
            dbCommand = null;
            db = null;

            biDelete = 0;

        }
    }

Спасибо за любые указатели, и да, я понимаю, что я ничего не ловлю.Мне нужно сначала преодолеть это препятствие.

Приветствия, ~ ck в Сан-Диего

1 Ответ

3 голосов
/ 20 мая 2010

Ваш сервер сборки игнорирует ваши тесты, потому что MSTest использует другой набор атрибутов для определения тестов, которые использует NUnit. Скорее всего, это ваша проблема, если она не видит каких-либо ваших тестов.

Например: MSTest использует [TestClass] и [TestMethod] для указания тестовых приборов и тестов, в то время как NUnit использует [TestFixture] и [Test].

Кроме того, NUnit эквивалентно [ClassCleanup] равно [TestFixtureTearDown] и не является статичным.

Имейте в виду, что если ваши тесты обязательно должны выполняться на MSTest и NUnit, вы можете украсить тесты атрибутами для обеих платформ, и это будет работать (в определенной степени, в любом случае). Однако, чтобы получить поведение ClassCleanup с обоими, вам нужно что-то вроде этого:

[ClassCleanup]
public static void MSTestClassCleanup()
{
    CommonCleanup();
}

[TestFixtureTearDown]
public void NUnitTearDown()
{
    CommonCleanup();
}

public static void CommonCleanup()
{
    // Actually clean up here
}
...