Я использую NUnit в сочетании с NSubstitute для тестирования приложения. Приложение использует платформу Caliburn.Micro MVVM. Рассмотрим следующий пример кода, для которого я хотел бы создать тест. Он использует класс агрегатора событий Caliburn Micro для публикации сообщения. Я хотел бы убедиться, что событие, опубликованное в этом коде, действительно содержит ожидаемый список целых чисел (как указано в комментарии в тестовом коде ниже).
public class ExampleEvent
{
List<int> SampleValues { get; set; }
}
public class ExampleClass
{
private IEventAggregator _eventAggregator;
public ExampleClass(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator
}
public void ExampleMethod()
{
var exampleArray = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
_eventAggregator.PublishOnUIThread(new ExampleEvent { SampleValues = exampleArray });
}
}
Тест для кода выше может выглядеть следующим образом ...
[TestFixture]
public class ExampleClassTests()
{
private ExampleClass _uut;
private IEventAggregator _eventAggregator;
[SetUp]
public void SetUp()
{
_eventAggregator = Substitute.For<IEventAggregator>();
_uut = new ExampleClass(_eventAggregator);
}
[Test]
public void ExampleMethod_ShouldRaiseEvent()
{
_uut.ExampleMethod();
// I would like to add something like the line below but errors are thrown when it is executed...
_eventAggregator.Received().PublishOnUIThread(Arg.Is<ExampleEvent>(x => x.SampleValues.Equals( new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 } )))
}
}
Как правильно это сделать?