В настоящее время я изучаю центр событий Microsoft и следил за примером кода здесь. Я изменил метод ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> events)
, так что теперь, когда я получаю EventData, я сохраняю его в базе данных. На данный момент я хочу использовать модульный тест для тестирования своего кода. В тестовом классе я настраиваю отправителя и отправляю данные в концентратор событий в методе инициализации, и эта часть работает отлично. Затем я создаю новый метод тестирования для проверки приемной стороны. Код выглядит так:
[TestMethod]
public void TestProcessEventsAsync()
{
//Initialize the receiver, and run it
Receiver receiver = new Receiver();
Receiver r = new Receiver(eventHubName, connectionString);
r.MessageProcessingWithPartitionDistribution();
//check if the data is stored in the database
...
}
Здесь я просто создаю новый экземпляр получателя и использую его для обработки данных, отправленных в концентратор событий. Я отправляю в концентратор событий только три объекта, и два из них используют один и тот же раздел. Тест не прошел, и выходные данные показывают, что не все разделы инициализированы, что означает, что приемник останавливается до того, как он завершит обработку всех данных.
Я предполагаю, что, поскольку метод MessageProcessingWithPartitionDistribution()
разделил задачу на несколько потоков, модульный тест не работает таким образом. Итак, мой вопрос: как я могу протестировать этот MessageProcessingWithPartitionDistribution()
метод с помощью модульного теста?
Любая помощь приветствуется!
Thread.Sleep(30000)
после того, как отправил сообщение в концентратор событий и до того, как получатель начал обрабатывать сообщение. Поэтому я думаю, что данные уже находятся в концентраторе событий, когда процессор хочет их обработать. - person de li   schedule 12.08.2015