使用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轻松实现行为驱动开发的主要内容,如果未能解决你的问题,请参考以下文章

两种方法,轻松上手ConfigMap!

前端测试

轻松保存重复多用的代码片段

从零开始使用CodeArt实践最佳领域驱动开发

iOS 相当于 Android 片段/布局

测试开发 | Junit5 + YAML 轻松实现参数化和数据驱动,让 App 自动化测试更高效