BDD for C#NUnit

BDD for C#NUnit,第1张

概述我一直在使用家庭酿造的BDD Spec扩展在NUnit中编写BDD样式测试,我想看看大家的想法.是否增加价值?是吸吗如果是这样的话?那里有更好的东西吗? 来源: https://github.com/mjezzi/NSpec 有两个原因我创建了这个 使我的测试容易阅读. 生成一个简单的英文输出 审查规格 以下是测试的样例: 因为僵尸似乎在这些日子很受欢迎 给了一个僵尸,派生和野兽: namespa 我一直在使用家庭酿造的BDD Spec扩展在NUnit中编写BDD样式测试,我想看看大家的想法.是否增加价值?是吸吗如果是这样的话?那里有更好的东西吗?

来源:
https://github.com/mjezzi/NSpec

有两个原因我创建了这个

使我的测试容易阅读.
生成一个简单的英文输出
审查规格

以下是测试的样例:

因为僵尸似乎在这些日子很受欢迎

给了一个僵尸,派生和野兽:

namespace Project.Tests.PersonVsZombIE{    public class ZombIE    {    }    public interface IWeapon    {        voID UseAgainst( ZombIE zombIE );    }    public class Person    {        private IWeapon _weapon;        public bool IsstillAlive { get; set; }        public Person( IWeapon weapon )        {            IsstillAlive = true;            _weapon = weapon;        }        public voID Attack( ZombIE zombIE )        {            if( _weapon != null )                _weapon.UseAgainst( zombIE );            else                IsstillAlive = false;        }    }}

nspec风格的测试:

public class PersonAttacksZombIETests{    [Test]    public voID When_a_person_with_a_weapon_attacks_a_zombIE()    {        var zombIE = new ZombIE();        var weaponMock = new Mock<IWeapon>();        var person = new Person( weaponMock.Object );        person.Attack( zombIE );        "It should use the weapon against the zombIE".ProveBy( spec =>            weaponMock.Verify( x => x.UseAgainst( zombIE ),spec ) );        "It should keep the person alive".ProveBy( spec =>            Assert.That( person.IsstillAlive,Is.True,spec ) );    }    [Test]    public voID When_a_person_without_a_weapon_attacks_a_zombIE()    {        var zombIE = new ZombIE();        var person = new Person( null );        person.Attack( zombIE );        "It should cause the person to dIE".ProveBy( spec =>            Assert.That( person.IsstillAlive,Is.False,spec ) );    }}

您将在输出窗口中获得Spec输出:

[PersonVsZombIE]- PersonAttacksZombIETests    When a person with a weapon attacks a zombIE        It should use the weapon against the zombIE        It should keep the person alive    When a person without a weapon attacks a zombIE        It should cause the person to dIE2 passed,0 Failed,0 skipped,took 0.39 seconds (NUnit 2.5.5).
解决方法 我将要求BDD的一些用途,而不仅仅是框架,因为我认为对单元级BDD有非常好的了解可能会影响您创建的一些内容.总的来说,我喜欢开始:

而不是将它们称为PersonAttacksZombIETests,我只是将它们称为PersonTests或PersonBehavIoUr.通过这种方式,可以更容易地找到与特定类相关联的示例,让您将它们用作文档.

它不像IsstillAlive是你想要设置在一个人的那种事情;而是内在的属性.小心做这样的公众的事情.您正在添加不需要的行为.

调用新人(null)似乎并不特别直观.如果我想创建一个没有武器的人,我通常会寻找一个新的Person()构造函数. BDD的一个好方法是编写你想要的API,然后使代码在下面做很好的工作 – 使代码易于使用,而不是易于编写.

我的行为和责任似乎有点奇怪.为什么这个人,而不是僵尸,负责决定这个人的生命或死亡?我喜欢看这样的行为:

>一个人可以配备一个武器(通过person.Equip(IWeapon武器)).
>如果没有武器,一个人以拳头开始.
>当这个人袭击一个僵尸时,这个人用僵尸上的武器.
>武器决定僵尸是死亡还是死亡.
>如果僵尸还活着,就会回击.僵尸会杀死人(通过person.Kill).

这似乎在我看来好像它的行为和责任在一个更好的地方.使用不同种类的武器进行无用的攻击,而不是检查null,也允许你避免if语句.你需要不同的测试:

拳头不应该用来对付僵尸
>电锯应该用来杀死一只僵尸
一个人在攻击一个僵尸时应该使用装备好的武器
>如果没有其他武器,一个人应该配备拳头
>一个僵尸应该还活着的时候应该还原.
>如果僵尸死亡,不应该攻击.
>一个僵尸死亡,如果死亡.
>一个人死亡,如果死亡.

除此之外,它看起来不错.我喜欢你使用嘲讽的方式,字符串的流程和测试方法本身的措辞.我也很喜欢ProveBy;它正在做它在锡上所说的,并且很好地把提供行为的例子和运行它们之间的区别作为测试.

总结

以上是内存溢出为你收集整理的BDD for C#NUnit全部内容,希望文章能够帮你解决BDD for C#NUnit所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存