Я пишу модульный тест для потока, который основан на событиях.Позвольте мне рассказать вам полный поток кода.У меня есть приложение App1, которое отправляет некоторые команды (в одну сторону) в App2.Затем App2 отправляет события через некоторое время в качестве ответа.Не ясно?Давайте упростим это.У меня есть приложение 1, которое позволяет пользователю выбрать некоторые товары, и после полного выбора пользователь зарезервировал выбранные товары, чтобы никакой другой пользователь не мог выбрать эти товары.Чтобы зарезервировать товар, приложение 1 отправляет команды в приложение 2, чтобы зарезервировать товар один за другим.Если имеется 3 товара, то приложение 1 отправляет товар 1 в приложение 2 для резервирования, когда событие, полученное от приложения 2, приложение 1 отправляет следующий товар 2 в резерв и снова процесс продолжается до тех пор, пока все товары не зарезервированы.Я уже реализовал эту функциональность, и теперь пришло время написать для нее тестовый модуль, но я не уверен, как мне справиться с этим.Слишком много текста, давайте посмотрим код.
public void ReserveGoods(List<Goods> items)
{
//Goods recived from GUI;
if (items.Count > 0)
{
var item = items.First();
//_agent is nothing but a class to communicate with App2
_agent.ReserveGood(item.SectNo);
//After this method, On GUI the status of process is pending unit the else part not run.
}
else
{
NotifyToGui(Response.GoodsReserved);
}
}
//Event recived from App2
private void ReadyToProcessNextGood(object sender, ReadyToStartNewGoodItemEventArgs e)
{
var processId = e.ProcessId;
//Remove reserved good.
_ItemRepository.Delete(e.SectNo);
var items = _ItemRepository.GetGoodsByProcessId(processId);
//Going to reserve remaining items
ReserveGoods(items);
}
Я хочу написать модульный тест для этого потока.Я могу поиздеваться над методом _agent.ReserveGood (item.SectNo), как при вызове события ReadyToProcessNextGood, но после вызова как попасть в событие ReadyToProcessNextGood.