- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
基于对 BDD 的一些简单阅读,我得出结论,单元测试是测试应用程序某些细粒度部分的好工具,而 BDD 是更高级别的工具,您可以在其中练习功能工作流。
我会考虑进行单元测试的一些项目:排序算法、状态缩减器、几何计算等......
我认为 BDD 候选人的项目将是功能工作流程:将项目添加到购物车、登录、搜索站点内容以查找类(class) Material 等...
我被客户要求写一个排序算法,通常我会写一个单元测试,比如:
public class SorterTest
{
[TestMethod]
public void TestSort()
{
var numbers = new List<int>() { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
var expected = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var sorter = new Sorter()
{
Input = numbers
};
var sorted = sorter.Sort();
CollectionAssert.AreEqual(expected, sorted.ToList());
}
}
但是,客户要求进行BDD测试,所以我想出了以下办法:
Feature: Sort
In order to to ensure sorting of integers
I want to be able to sort a collection of integers
Scenario Outline: Perform a sort
Given I have these integers: '<input>'
When I sort them
Then the result should be '<expected>'
Examples:
| input | expected |
| 9,8,7,6,5,4,3,2,1 | 1,2,3,4,5,6,7,8,9 |
为了使我的 Sorter
对象可用于 BDD 测试,我必须更改它:
private Sorter sorter = new Sorter();
[Given(@"^I have the following integers: '(.*)'$")]
public void GivenIHaveTheFollowingIntegers(string numbers)
{
var inputs = numbers.Split(',')
.Select(s => Convert.ToInt32(s.Trim()))
.ToList();
sorter.Input = inputs;
}
注意使用 Given
设置测试,我必须将 Input
属性添加到 Sorter
tp 准备排序。缺点是在应用程序代码中,如果我希望我的排序器执行排序,我将始终需要在执行排序之前设置此属性:
sorter.Input = intCollection;
var result = sorter.sort();
我宁愿只拥有:
var result = sorter.sort(intCollection);
BDD 适合这种测试吗?如果是这样,我这样做对吗?添加 Input
属性感觉不对,我应该用其他方式来做吗?
如果不合适,如何在 BDD 和单元测试之间划清界线?有一个 existing SO post ,但答案引用了一本书。如果能得到更好的指导就好了。
最佳答案
在两种风格之间进行选择
在单元测试 (TDD) 方法和 BDD 方法之间进行选择归结为偏好。如果客户要求 BDD,请提供 BDD。如果团队更习惯 TDD,请使用 TDD。
混合两种方法
选择不是唯一的。我有混合使用这两种方法的经验。要回答在这两种方法之间划清界限的问题,Agile Testing Quadrants很有帮助:
画一条线
我发现单元测试 (TDD) 方法对面向技术的测试更有帮助。 BDD 方法对面向业务的测试更有帮助。
有关此观察的详细信息
将业务需求映射到 BDD 样式测试更为自然。要测试具有一定商业值(value)的业务需求,通常需要集成多个类。根据我的经验,那些 BDD 风格的测试通常是集成测试,并且具有功能测试 和用户验收测试 的特征。
另一方面,TDD 测试是由程序员为程序员编写的。许多程序员对单元测试 (TDD) 方法更熟悉或更有经验。这些测试通常单独测试类,并强调系统的边缘情况和技术方面。
您提供的示例非常异常(exception),因为它在单个类中映射了一个业务案例。在这种情况下,两种方法都可以。
关于c# - 何时使用单元测试与 BDD 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232793/
有没有人使用 BDD 来驱动他们的域层? 最佳答案 是的,我们发现这个过程非常有效,并且使用 specflow 来提供这种方法相当容易。我们仅在域层中就实现了 2000 多个场景,我们也使用这种方法来
你需要像Fitnesse这样的东西吗? , 如果您有 BDD测试? 最佳答案 BDD“测试”存在于多个不同的粒度级别,一直到最初的项目愿景。大多数人都知道这些场景。有几个人记得BDD started
对于在休闲游戏开发工作室开始学习和应用 BDD,您有什么建议? 最佳答案 虽然我不能说专门在游戏中使用 BDD,但我不能错过向您介绍这篇优秀文章的机会: http://www.code-magazin
我很喜欢 BDD 的开发方法,但我遇到了对走多远的担忧。这条来自 ThoughtWorks 的最新评论 Radar让我暂停: "The advent of behavior-driven design
我有很多相同的场景,它们只是传递给它们的数据不同。 这是示例: 功能:将报表中的事实链接到 Excel 文档 为了将事实链接到 Excel 文档 作为有权报告的用户 我想点击报告中的事实值 场景:任何
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
似乎互联网没有明确的答案,也没有一套原则来帮助我回答这个问题。所以我求助于 SO 上的伟大人物帮助我找到答案或指导思想:) SpecFlow 对于 .NET 中的 BDD 非常有用。但是当我们谈论 B
我是 BDD 的新人。所以我对场景有一些疑问? BDD 场景和用户场景之间有什么区别?与传统所谓的“用户场景”或“用例”有明显区别吗?你能解释一下吗? 最佳答案 由于您刚才提到的“传统用户场景”有点含
我是 BDD 的新人。所以我对场景有一些疑问? BDD 场景和用户场景之间有什么区别?与传统所谓的“用户场景”或“用例”有明显区别吗?你能解释一下吗? 最佳答案 由于您刚才提到的“传统用户场景”有点含
只是寻找 BDD/SpecFlow 的一些示例 - 理想情况下是一个项目б,这样我就可以了解如何在大型项目中使用 SpecFlow,其中多个功能引用相同的步骤等. 在过去的几个月里,我读了一些博客,但
我们有一个工作流引擎,它会显示可用工作流列表(我指的是工作流定义,而不是实例),用户可以单击任何工作流旁边的“执行”链接来执行该工作流的新实例。我想以 BDD 方式完成这个“执行工作流”故事(功能?)
有谁知道实现这一目标的方法,或者他们认为这是一个好主意。在 Gherkin 中使用 OR 样式语法以减少重复但保持人类可读性(希望如此)。我正在考虑使用多个 OR 语句的每个组合扩展子句组合的情况。例
我有许多 BDD 故事/场景(450+ 以及不断增加),我为现有系统继承了这些故事/场景:more info 。这些故事是使用文件系统文件夹组织的: C:\specifications |
我希望更改 Serenity 报告中的 CSS 和 Logo 。此外,我想在 Serenity 报告中添加一些自定义文本或一些测试的链接。就像生成了一个 excel 报告,我希望在报告的测试步骤中提供
我正在处理几个月前部分完成的代码分支,以及相互交织的依赖关系。因此,前进的最简单方法是将特定分支上的失败测试标记为待处理(rspec 方式)或跳过,并在所有内容合并后处理它们。 在其最终报告中,beh
我是 BDD 新手,使用 SpecFlow 我正在尝试制定一种高效、有组织且可维护的方法(用于 ASP.NET MVC 中)。我需要改进的主要方面是: 步骤分组(到步骤文件中) 重用测试对象(就像通过
我整个星期都在四处寻找,无法全神贯注于如何让我们的 pylons 服务器实例启动以与 Behave BDD 一起使用。你们中的任何人都可以指出我的例子或提供您自己的例子吗?这是我正在处理的内容: 来自
我正在尝试为多步骤业务流程编写需求(通过向导)。我有很多场景,用户与一个屏幕的交互会改变您是否可以在另一个屏幕上选择选项。 例如(我已经模糊了实际业务,但步骤的过程和形式几乎相同): Feature:
有没有人有在 BDD 中使用现成框架作为规范流与 CQRS 的经验。 我喜欢 Mark Nijhof 的方法,但是我已经将 SpecFlow 用于其他项目。任何人都可以提供一些启示,如果可能的话,举个
我们正在尝试为每个步骤截取屏幕截图。 一切正常。但是我们无法将屏幕截图与创建它们的步骤相关联。 我们想要的是类似 FeatureContext.FeatureInfo 的东西和 ScenarioCon
我是一名优秀的程序员,十分优秀!