Вы можете описать тесты в стилях Given / When / Then или Arrange / Act / Assert.
ользовал расширение BDD Spec, созданное в домашних условиях, для написания тестов в стиле BDD в NUnit, и я хотел узнать, что все думают. Это добавляет ценность? Это сосать? Если так, то почему? Есть ли что-нибудь лучше там?
Вот источник:https://github.com/mjezzi/NSpec
Есть две причины, по которым я создал это
Чтобы мои тесты легко читались.Чтобы получить простой английский вывод для просмотра спецификации.Вот пример того, как будет выглядеть тест:
- так как зомби, кажется, популярны в эти дни ..
Учитывая Зомби, Песон и IWeapon:
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 die
2 passed, 0 failed, 0 skipped, took 0.39 seconds (NUnit 2.5.5).