Events - hypersolutions/hypermock GitHub Wiki
Raising events on mocks
There is some limited support for events in HyperMock. Given an interface exposes an event and a class registers a handler against it, HyperMock allows raising of those events to test the handlers attached:
public interface IThermostatService
{
event EventHandler<TempChangedEventArgs> TempChanged;
void ChangeTemp(int temp);
}
public class TempChangedEventArgs : EventArgs
{
public TempChangedEventArgs(int temp)
{
Value = temp;
}
public int Value { get; }
}
And the controller:
public class ThemostatController
{
private readonly IThermostatService _thermostatService;
public ThemostatController(IThermostatService thermostatService)
{
_thermostatService = thermostatService;
_thermostatService.TempChanged += OnTempChanged;
}
private void OnTempChanged(object sender, TempChangedEventArgs args)
{
_thermostatService.ChangeTemp(args.Value);
}
}
Then to test that the ChangeTemp method is called:
[Test]
public void RaiseInvokesAddHandlerWithParams()
{
const int temp = 100;
var mockService = Mock.Create<IThermostatService>();
var controller = new ThermostatController(mockService.Object);
mockService.Raise(s => s.TempChanged += null, new TempChangedEventArgs(temp));
mockService.Verify(p => p.ChangeTemp(temp), Occurred.Once());
}