Beaucoup de nos tests système sont écrits dans un style BDD, et nous utilisons assez bien les comportements hérités pour minimiser la duplication, par exemple cela pourrait être une hiérarchie de base pour les tests d'achat.Existe-t-il un cadre de style BDD qui autorise plusieurs comportements hérités?
class BehavesLikeSuccessfulPurchase
class BehavesLikePurchaseWithValidCreditCard : BehavesLikeSuccessfulPurchase
Dans ce cas, le BehavesLikeSuccessfulPurchase
définit les comportements communs comme le relevé de compte devrait avoir une entrée de débit, et la classe BehavesLikePurchaseWithValidCreditCard
définit le flux de travail de test pour l'achat de tout type de produit avec une carte de crédit valide, de sorte que les essais sont petits classes dérivées qui fournissent simplement l'instance de produit concrète, par exemple
[Concern(typeof(Video))]
class WhenPurchasedWithValidCreditCard : BehavesLikePurchaseWithValidCreditCard
Cependant, en fonction du type de produit en béton nous avons également besoin d'avoir des contrôles supplémentaires, par exemple chaque fois est acheté avec succès une vidéo que nous voulons vérifier qu'il est ajouté à la bibliothèque vidéo de l'utilisateur. Idéalement, cela pourrait être défini par une autre classe et on mélange, en utilisant la syntaxe hypothétique:
class BehavesLikeSuccessfulVideoPurchase
[Concern(typeof(Video))]
class WhenPurchasedWithValidCreditCard : BehavesLikePurchaseWithValidCreditCard
mixin BehavesLikeSuccessfulVideoPurchase
{
}
Mais bien sûr, C# ne prend pas en charge l'héritage multiple ou mixins si nous finissons par écrire une charge de méthodes passe-partout qui avant appelle aux comportements supplémentaires, qui doit changer chaque fois que ce comportement change. Ce dont nous avons vraiment besoin, c'est d'un cadre qui possède son propre mécanisme de prise en charge de multiples comportements à partir de tests simplement en fournissant le (s) type (s) de comportements supplémentaires qui doivent être observés. J'ai regardé xUnit et les exemples de spécifications, et il semble qu'il serait possible de trouver des extensions qui pourraient faire l'affaire, mais existe-t-il déjà quelque chose?