Ситуация: Некоторые из моих классов тестов интеграции используют общий подход к настройке сценариев в базе данных, поэтому я предоставляю абстрактный базовый класс. Он также берет на себя полную очистку данных в конце после того, как все тесты гласил:Несколько атрибутов ClassCleanup для каждого тестового класса
public abstract class IntegrationTests
{
...
protected static void Cleanup() { ... }
}
Мои наследственные классы, необходимые для вызова метода базового для того, чтобы моя база очистки код работает:
[TestClass]
public class FooIntegrationTests : IntegrationTests
{
...
[ClassCleanup]
public static void FooCleanup()
{
...
Cleanup();
}
}
Выпуск: Согласно MSDN «[1] один метод в классе может быть украшен атрибутом [ClassCleanup]», поэтому я не могу украсить метод Cleanup
из базового класса, и даже если бы этот метод не получил, называется.
Вопрос: Я хочу, чтобы решение, которое
- всегда запускает
Cleanup
метод базового класса без реализации ничего унаследованных классов, и - всегда работает метод пользовательских очистки от наследуя тестовый класс, если он есть.
Мне не нравится принуждать наследующий тестовый класс к явному вызову базового класса, поскольку я должен помнить о его реализации. Я предпочел более элегантный, но простой (!) Метод. Есть идеи?
Примечание: Обеспечение одиночного элемента для моей базовой функциональности, которое должно использоваться всеми тестовыми классами, не работает, потому что параллельно я запускаю свои тесты на нескольких тестовых агентов, которые все подключены к одному экземпляру базы данных.
Атрибут 'ClassCleanup' может быть назначен только статическим методам. Ключевые слова 'virtual' и' override' могут использоваться только для методов экземпляра. –
А, правильно, я думал о обычной установке/разрыве. Извиняюсь. –
Статический метод/класс нарушает обычные правила наследования. Так что нет, я не уверен, что вы можете здесь сделать, кроме вызова Cleanup из вашего класса наследования. –