Многие из наших системных тестов написаны в стиле BDD, и мы делаем достойное использование унаследованных действий для минимизации дублирования, например, это может быть базовая иерархия для тестов на покупку.Есть ли в стиле BDD фреймворк, который позволяет несколько унаследованных форм поведения?
class BehavesLikeSuccessfulPurchase
class BehavesLikePurchaseWithValidCreditCard : BehavesLikeSuccessfulPurchase
В этом случае BehavesLikeSuccessfulPurchase
определяет общее поведение как выписки со счета должен иметь запись дебета, а BehavesLikePurchaseWithValidCreditCard
класса определяет тестовый рабочий процесс для приобретения любого вида продукции с кредитной картой, так что тесты маленькие которые просто предоставляют конкретный экземпляр продукта, например
[Concern(typeof(Video))]
class WhenPurchasedWithValidCreditCard : BehavesLikePurchaseWithValidCreditCard
Однако, в зависимости от конкретного типа продукта, мы также должны иметь некоторые дополнительные проверки, например, всякий раз, когда видео успешно закупали мы хотим, чтобы проверить, что он будет добавлен в библиотеку видео пользователя. В идеале это может быть определено другим классом и смешивают, используя гипотетическую синтаксис:
class BehavesLikeSuccessfulVideoPurchase
[Concern(typeof(Video))]
class WhenPurchasedWithValidCreditCard : BehavesLikePurchaseWithValidCreditCard
mixin BehavesLikeSuccessfulVideoPurchase
{
}
Но, конечно, C# не поддерживает множественное наследование или Примеси, чтобы мы в конечном итоге писать нагрузку методов шаблонный вперед призывает к дополнительным поведением, которые должны меняться каждый раз, когда поведение изменяется.
Что нам действительно нужно, так это каркас, который имеет свой собственный механизм поддержки множественного поведения от тестов просто путем предоставления типов (типов) дополнительного поведения, которые должны соблюдаться. Я рассматривал xUnit и примеры спецификации, и похоже, что можно было бы придумать некоторые расширения, которые могли бы сделать трюк, но есть ли что-нибудь уже существующее?