我们的许多系统测试都是用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和规范示例,看起来有可能想出一些可以做到这一点的扩展,但是有没有什么已经存在的东西?