使用LightBDD轻松实现行为驱动开发
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用LightBDD轻松实现行为驱动开发相关的知识,希望对你有一定的参考价值。
前言
上次,我们介绍了行为驱动开发(BDD)
它的优点是可以使用纯文本编写测试用例,不需要编程经验。
如果测试用例也全部是程序员写的情况,这种方式反而存在障碍,feature使用与编写代码的语言完全不同的语言来编写,维护测试需要在feature和step代码间来回切换。
LightBDD
LightBDD是轻量级的行为驱动开发框架。
它提供了一种替代方案,你可以直接在C#代码中编写BDD风格的测试,以便开发人员可以使用IDE以简单自然的方式维护测试。
我们以SpecFlow官方的计算器示例为例,演示使用LightBDD如何实现。
1. 创建Calculator项目
假设,我们需要实现加法功能。
创建一个类库,编写如下代码:
public class Calculator
{
public int FirstNumber { get; set; }
public int SecondNumber { get; set; }
public int Add()
{
return FirstNumber + SecondNumber;
}
}
2. 创建XUnit测试项目
添加XUnit测试项目,引用nuget包LightBDD.XUnit2
。
然后创建partial类,以便将feature和step代码分开,这样更好管理和阅读:
[FeatureDescription("第一个feature")]
public partial class UnitTest1 : FeatureFixture
{
//放置场景代码
}
public partial class UnitTest1
{
//放置步骤代码
}
3. 编写场景代码
现在编写我们第一个场景,使用SpecFlow是这样的:
我们用LightBDD可以这样写:
[Scenario]
public void Adding_two_numbers_should_return_total()
{
Runner.RunScenario(
_ => Given_the_first_number_is(50),
_ => And_the_second_number_is(70),
_ => When_the_two_numbers_are_added(),
_ => Then_the_result_should_be(120)
);
}
4. 编写step代码
可以看到,场景全部用C#代码,因此从场景定义中自动生成方法变得非常容易。
填充后的step代码如下:
public partial class UnitTest1
{
private readonly Calculator _calculator = new Calculator();
private int _result;
private void Given_the_first_number_is(int number)
{
_calculator.FirstNumber = number;
}
private void And_the_second_number_is(int number)
{
_calculator.SecondNumber = number;
}
private void When_the_two_numbers_are_added()
{
_result = _calculator.Add();
}
private void Then_the_result_should_be(int number)
{
Assert.Equal(number, _result);
}
}
5. 运行测试
最后,运行测试:
而且,如果你打开bin\\Debug\\net5.0\\Reports文件夹,可以找到一个html报告,更加清晰地反映测试质量:
结论
我们都知道,好的测试可以带来更好、错误更少的程序,实现更快的开发。
但是编写出有效的测试不是一件容易的事!
LightBDD提供了一个方便的解决方案,使你的测试场景清晰,编写起来更加轻松!
如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!
以上是关于使用LightBDD轻松实现行为驱动开发的主要内容,如果未能解决你的问题,请参考以下文章