我们一直在使用BDD - Behaviour Driven Development(来自Dan North的观点)作为记录用户验收测试并推动几个项目开发的机制,取得了不错的成功。到目前为止,我们实际上并没有实际自动化测试。
我现在正在考虑自动化测试,但我不确定要支持哪种行为框架。到目前为止,NBehave似乎是先行者 - 但还有其他我应该关注的吗?目前是否有明确的“赢家”?
答案 0 :(得分:332)
答案 1 :(得分:47)
答案 2 :(得分:15)
StoryQ看起来像是一个很好的替代NBehave的Fluent界面。我肯定会检查出来。
答案 3 :(得分:12)
我不认为真的有'胜利者'。其他框架包括SpecUnit.NET项目,MSpec也显示了Gallio适配器开头的承诺。从技术上讲,自从IronRuby即将到来之后,rSpec 可能成为那些准备进入前沿的人的选择。 NBehave + NSpec可能是最好的自动化框架,尽管我发现自己正在反对过于冗长的语法。
我会全力检查它们并选择最适合您项目风格的框架。它们都是OSS,所以它很难输,真正的好处只是转向BDD。
答案 4 :(得分:7)
我个人会推荐BDDfy
,这在我看来很棒!它是开源的,支持常规和流畅的场景描述,涵盖了很好的接受和单元测试。您可以在GitHub上找到它。
答案 5 :(得分:6)
Robot Framework也可以与IronPython一起用于.Net中的ATDD或BDD。我认为Robot Framework的表达能力比例如。 SpecFlow或NSpec。它不会强制您使用某种语法,而是使用关键字驱动的方法。如果您正在测试Web应用程序,它有Selenium2Library,它提供了与Selenium WebDriver的绑定。
答案 6 :(得分:5)
还有Specter,它定义了Boo中的DSL以使其更加自然。
答案 7 :(得分:4)
我通常会支持NBehave,结合MbUnit以及您需要的任何DI /模拟框架。 Jim Burger公平地评论说NBehave非常冗长,我发现自己有时会使用剪切和粘贴。不过,它运行得很好 - 我正在使用Gallio的ReSharper插件,所以我只是得到一个额外的窗口显示。但是,还没有尝试使用ccnet。
答案 8 :(得分:2)
查看此博客文章及其评论,以获得鼓舞人心的想法:http://haacked.com/archive/2008/08/23/introducing-subspec.aspx/
答案 9 :(得分:2)
Concordion.NET不仅支持BDD,还支持ATDD:http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd/ Specifications are written in plain English使用HTML。恕我直言,这是Concordion.NET的好处之一。可以将HTML文档组织成可导航的结构以构建living documentation system。而且,由于测试是针对系统运行的,因此您可以确信文档始终是最新的。
答案 10 :(得分:1)
我开始在BDD首次参加我的团队的小型应用程序。我们选择执行此工作的工具包括:针对xBehave故事的Selenium Webdriver和针对我们的xSpec单元测试的自动锁定容器的Machine.Fakes.Moq的MSpec的Specflow。由于Specflow和MSpec支持的集成,Resharper既是我们的故事跑者又是规格跑者。使用R#本地集成到visual studio中是我们的一个关键特性。
由于我们的设计都是MVC3,我们也将应用orchestrator separation pattern to our MVC controllers。这将允许我们直接针对协调器编写规范。然后让我们直接针对我们的应用程序使用来编写故事。
答案 11 :(得分:1)
由于我现在正在处理BDD以进行安全关键应用程序的系统测试,我只能分享我的经验,你不应该低估用自然语言编写的测试的力量"而不是"代码"。
我们一直专注于提供一种功能语言,任何人都可以在没有任何技术背景或编程经验的情况下理解(参见上面的specflow示例),我们做得很好。除了我从未向任何人解释语法之外,每个人都立即理解测试,开发人员,经理甚至测试人员的意义。
我会以任何方式避免用编程语言编写的测试,例如上面的MSpec示例。如果我在经理办公室出现这样的测试,他会把我踢出去。但他有兴趣阅读基于Gherkin-Syntax的测试。能够阅读和修改测试的人越多越好。
最后但并非最不重要的是,这些测试可以移植到任何其他编程语言,任何其他平台,任何其他测试自动化工具,而无需任何更改。
同样,答案还有一次:
不要关心工具及其功能本身,选择一种工具,让您可以随时轻松切换到其他工具而不会丢失信息。工具来来去去,我的测试应该持续更长时间。 : - )
我可以推荐使用SpecFlow。您可以完全访问完整的.Net库及其所有功能,您的测试可以保持便携。如果您不介意可移植性,这可能会使您比完全可移植的解决方案(如机器人框架)更具优势。但是,通过使用不同的工具进行开发和测试,您始终可以提高系统的稳定性和可移植性。因此,在某些情况下,使用基于python的BDD方法测试.Net软件可能是一个好的(甚至更好的)。
然而,SpecFlow在每天测试中都显示出稳定和防弹,包括在中型项目中进行夜间构建测试等。此外,它还可以很好地集成到Microsoft单元测试环境中。
答案 12 :(得分:0)
另请查看UBADDAS,特别是
中找到的UAThttps://github.com/KernowCode/UBADDAS
这里有解释
http://kernowcode.wordpress.com/(2014年6月)
你可以写一个像这样的测试
[Test]
public void IWantToRegisterANewUser()
{
var user = new User();
ICustomer customer = new Customer();
SoThat(MyBusinessValue.IncreaseCustomerBase)
.As(user)
.Given(customer.Register)
.When(customer.Confirm_Registration)
.Then(customer.Login);
}
并生成此
I want to register a new user
so that Increase customer base
as user
given Register customer
when Confirm customer registration
then Login customer