Will man testen, ob eine Klasse ein bestimmtes externes Event korrekt verarbeitet, kann man dies dank der Mocking-Features in den xUnit.BddExtensions leicht tun.
Angenommen, wir wollen testen, ob ein LichtSensor auf ein ein- bzw. ausgeschaltetes Licht reagiert, können wir das wie folgt testen:
using Xunit;
namespace LightSensor.Tests {
[Concern(typeof (ILightSensor))]
public class When_light_is_switched_on : InstanceContextSpecification<ILightSensor> {
protected override void EstablishContext() {
}
protected override ILightSensor CreateSut() {
return new LightSensor();
}
protected override void Because() {
Sut.Watch(The<ILight>());
The<ILight>()
.Event(s => s.LightSwitched += (sender, args) => { })
.Raise(this, new { LightState.On } );
}
[Observation]
public void Should_be_detected_by_sensor() {
Sut.LightState.ShouldBeEqualTo(LightState.On);
}
}
}
Entscheidend ist die Methode The<ILight>(), welche ein Mock vom Typ ILight erzeugt und dieses zurückgibt.
Den Rest erledigt eigentlich RhinoMocks, welches in den xUnit.BddExtensions verwendet wird.
Das ILight-Mock wirft das Event LightSwitched mit dem Parameter LightState.On, welcher in der Observation entsprechend geprüft wird.
Weitere Details finden sich in der Beispiel-Solution, die hier heruntergeladen werden kann:
EventsBddExtensions.zip (1.32 mb)
Currently rated 3.0 by 5 people
- Currently 3/5 Stars.
- 1
- 2
- 3
- 4
- 5