2012-08-28 84 views
2

我正在寻找一种在specflow功能中实现继承的方法。例如,具有必须测试的常见场景的基本要素类。Specflow功能中的继承

3-4派生要素类,它接收基类中的所有场景并添加它们自己的一些场景。同样,Binding类也将遵循继承结构。这需要测试一个具有基本控制器的ASP.NET MVC应用程序(基本功能类中的场景)和4-5个实现。

我可以复制每个派生控制器类的功能文件,但这会导致相当多的重复。

这是可能的specflow,或者我走错了路线?请帮忙。谢谢,

回答

3

我不是100%确定如果这是正确的道路(读,我从来没有需要做这样的事情)。对于我来说,任何继承和重用都来自于步骤定义(或绑定)类。但即使如此...

我不知道你是否可以简单地使用SpecFlow中可用的工具来做到这一点 - 但你有以下选项,只要我能看到(这不是一个经过测试的理论..我可能会在稍后测试 - 但我想这可能会为您提供一个主意......)

  • 您的功能文件的“代码隐藏”(设计器生成代码)是部分类实现...
  • ...所以我想你可以创建一个“基本”(通用)功能文件...
  • ...然后为您的每个特定/实现功能文件的代码隐藏创建一个部分类文件...
  • ...每个部分类将指定一个基类,它是从“基本”功能文件代码隐藏中生成的类名称。

希望这会有所帮助。

编辑: 好吧我已经测试了这个理论......它会像我上面描述的那样工作。我刚刚创建了一个包含相关测试/规格项目的新项目,并在测试/规格项目中进行了上述操作。测试运行器运行基本功能,然后再运行包含基本功能的特定/实现功能。

有一个 - 它需要不到5分钟来打破我建议的,并且看看结果是否符合您的要求。

+0

非常感谢您的回答。这完全正常我想要的。唯一的问题是继承要素类在派生度量更新时会丢失,可能是因为specflow重新生成文件。 :(我想要做的是重复使用相同的功能文件的两个不同的步骤定义类,这是从相同的基础步骤定义类派生。如果我创建两个步骤定义的作用域相同的功能,它给了我一个ambigious call :(如果specflow同时采用了匹配的步骤定义并运行它,那将会很棒 – ganeshran

+0

嗨我可以通过场景大纲来实现这一点,我传入了值并且有一个抽象工厂类,它根据关键字返回实例场景大纲我将所有常用功能放在一个功能文件中,并将为特殊场景创建新功能,但不创建重复功能的主要目的是使用此技术实现的。感谢您的回复! – ganeshran