47

Fitnesse如果你有BDD测试,你需要类似的东西吗?

4

7 回答 7

126

BDD“测试”存在于多个不同的粒度级别,一直到最初的项目愿景。大多数人都知道这些场景。一些人记得BDD 以“应该”一词作为 JUnit 的“测试”的替代词开始 - 作为 TDD 的替代品。我将“测试”放在引号中的原因是因为 BDD 并不是真正的测试。它的重点是寻找缺乏理解或理解不匹配的地方。

由于这个重点,对话比 BDD 工具重要得多。

我要再说一遍。对话比 BDD 工具重要得多。

验收测试实际上并不强制进行对话,并且通常假设您正在编写的测试是正确的测试。在 BDD 中,我们假设我们不知道我们在做什么(并且可能不知道我们不知道)。这就是为什么我们使用“给定,何时,然后”之类的东西 - 这样我们就可以围绕场景和/或单元级示例进行对话。(这是大多数人熟悉的两个级别——相当于验收测试和单元测试——但它的规模更大了)。

我们不称它们为“验收测试”,因为您不能要求业务人员“请帮助我进行验收测试”。他们会用一种非常奇怪、斜视的眼神看着你,然后把你当作那个怪胎女孩。93% 的人不希望这样。

尝试“我想和你谈谈......”的场景。或者,“你能给我举个例子吗?” 这些都很好。称它们为“验收测试”开始让人们认为你实际上是在做测试,这意味着你知道你在做什么,只是想确保你已经完成了它。在这一点上,谈话往往集中在你能多快把错误的东西拿出来,而不是你把错误的东西拿出来的事实。

你得到了错误的东西。真的,老实说,你是。即使你认为你不是,那只是因为你不了解二阶无知。你不知道你不知道,没关系,只要你找到了你可以知道你不知道的地方。(你不会找到所有这些。不要让分类悖论让你夜不能寐。)

真正做到正确的唯一方法是预先获得所有要求,并且您知道尝试时会发生什么。这是正确的。是瀑布。还记得加班吗?周末上班?在这七年中,您创造的任何东西都没有投入生产?如果你想避免这种情况,你只有一次机会:假设你错了,就它进行一些对话以减少错误,然后接受你仍然是错的并继续努力。过早编写测试意味着你有更多的机会出错,现在更难改变,每个人都认为你是对的,PM 正在衡量你的速度,现在你承诺再犯 2 周。而且 - 更糟糕的是 - 你将要测试你'

再来一次。对话比 BDD 工具重要得多。

拜托,拜托,不要专注于工具。这些工具只是一种用于捕获对话并确保它们在代码中发挥作用的机制。场景不能替代对话,就像 3 x 5 索引卡可以替代需求一样。

话虽如此,如果您必须从工具开始,请将 Slim 放在 Fitnesse 后面,这样它就可以运行可爱的 Given / When / Thens,而不必弄乱 Fit 的桌子和固定装置。GivWenZen是基于 Slim 和其中任何一个岩石。FitSharp 是 .NET 领域的等价物。或者只是使用 Cucumber 或 SpecFlow,或者使用一些定制的 DSL*,它可以很好地完成多年的工作。

透明度:*我写了那个。还有一些 JBehave。我希望我们称它为“不要专注于 BDD 工具行为”。我可能会大量参与 BDD 的其他部分。另外,如果我能把这条信息传达出去,丹诺斯会给我买一品脱,所以这不是完全公正的建议。

无论如何-已经进行了对话。这只是人。去谈谈。

于 2010-11-22T18:41:50.387 回答
5

我不知道是否有这样的东西,严格来说,作为“BDD 测试”。BDD 是一种哲学,它建议您如何最好地与利益相关者互动和协作以完成复杂的项目。它没有直接为编写测试的最佳方式制定任何规定。换句话说,在 BDD 哲学项目下,您可能仍然需要进行所有常见类型的测试(包括验收测试)。

当您听到“BDD 框架”时,说话者通常是指用于编写所有常用测试但带有 BDD 扭曲的框架。例如,在 RSpec 中,您仍然编写单元测试;您只需向它们添加 BDD 风味。

于 2009-04-20T08:46:59.827 回答
2

虽然 BDD 比仅测试的范围更大,但确实存在 BDD 测试。这些测试是遵循 BDD 语言的单元测试。

给定一些初始上下文(给定),当事件发生时,确保一些结果。

根据您偏好的语言,有一些不错的 BDD 框架可用。 JBehave for Java RSpec for Ruby NBehave for .NET

于 2009-05-13T18:38:29.260 回答
2

我喜欢区分“规格”和“测试”。

如果我要介绍一个名为 的方法GetAverage(IEnumerable<int> numbers),我将编写一个或多或少的标准单元测试。

如果我涵盖了一个名为 的方法CalculateSalesTax(decimal amount, State state, Municipality municipality),我仍然会编写单元测试,但我会称它为规范,因为我将对其进行更改 (1) 以验证例程的行为,以及 (2)因为测试本身将记录例程及其验收标准。

考虑:

[TestFixture]
public class When_told_to_calculate_sales_tax_for_a_given_state_and_municipality() // the name defines the context
{
    // set up mocks and expected behaviour
    StateSalesTaxWebService stateService 
        = the_dependency<IStateSalesTaxWebService>;
    MunicipalSurchargesWebService municipalService 
        = the_dependency<IMunicipalSurchargesWebService>;

   stateService.Stub(x => x.GetTaxRate(State.Florida))
        .Return(0.6);
    municipalService.Stub(x => x.GetSurchargeRate(Municipality.OrangeCounty))
        .Return(0.05);

    // run what's being tested
    decimal result = new SalesTaxCalculator().CalculateSalesTax
        (10m, State.Florida, Municipality.OrangeCounty);

    // verify the expected behaviour (these are the specifications)
    [Test]
    public void should_check_the_state_sales_tax_rate()
    {
        stateService.was_told_to(x => x.GetTaxRate(State.Florida)); // extension methods wrap assertions
    }

    [Test]
    public void should_check_the_municipal_surcharge_rate()
    {
        municipalService.was_told_to(x => x.GetSurchargeRate(Municipality.OrangeCounty));
    }

    [Test]
    public void should_return_the_correct_sales_tax_amount()
    {
        result.should_be_equal_to(10.65m);
    }
}
于 2009-08-13T05:17:19.283 回答
2

JBehave(和 NBehave 最近添加了相同的支持)与常规测试文件一起工作,因此当许多其他框架添加“BDD 品味到单元测试”时,使用 JBehave 创建的基于文本的行为规范/示例适用于验收测试。不,你不需要健身。

要了解它是如何工作的,我建议JBehaves 2min tutorial

于 2009-09-03T06:36:33.110 回答
0

对于 Flex 中的 BDD 测试,您可以尝试 GivWenZen-flex 查看http://bitbucket.org/loomis/givwenzen-flex

干杯,克里斯

于 2010-06-25T21:48:38.870 回答
0

实施良好的 xBehavior BDD 测试是机器人驱动的用户接受标准。

xSpecification BDD 测试通常是单元测试,不太可能成为可接受的用户接受标准。

于 2011-12-08T17:27:25.050 回答