Tags: , , | Posted by AlexanderZeitler on 11/21/2010 12:35 AM | Comments (0)

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)

DotNetKicks-DE Image

Currently rated 3.0 by 5 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Comments are closed