я могу сделать следующее, чтобы проверить, является ли ErrorOccurred
событие моего Consumer
класса было поднято:Использования FakeItEasy утверждать, что событие было поднято
using System;
using FakeItEasy;
using Microsoft.VisualStudio.TestTools.UnitTesting;
public interface IService
{
event EventHandler SomethingBadHappened;
}
class Consumer
{
private readonly IService service;
public Consumer(IService service)
{
this.service = service;
service.SomethingBadHappened += (sender, args) => RaiseErrorOccurred();
}
public event EventHandler ErrorOccurred;
protected virtual void RaiseErrorOccurred()
{
var handler = ErrorOccurred;
if (handler != null) handler(this, EventArgs.Empty);
}
}
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var service = A.Fake<IService>();
var consumer = new Consumer(service);
bool eventWasRaised = false;
consumer.ErrorOccurred += (sender, args) => { eventWasRaised = true; };
service.SomethingBadHappened += Raise.WithEmpty();
Assert.IsTrue(eventWasRaised);
}
}
Интересно, если есть более «Mocking Framework-у» способ сделать это. Что-то вроде ниже будет приятно:
var service = A.Fake<IService>();
var consumer = new Consumer(service);
service.SomethingBadHappened += Raise.WithEmpty();
consumer.ErrorOccurred.MustHaveHappened(/*yada yada/*);
Это действительно выглядит более привлекательным для меня из-за самого факта вы упомянули: обеспечение, что вызов был сделан определенное количество раз или с определенными аргументами. Спасибо за полный ответ! –
Рад помочь, @JoaoMilasch. Повеселись. –