Как ожидать одни сообщения и игнорировать другие с помощью akka.net testkit?

У меня есть тест для актера, который может ответить неожиданными сообщениями, но в конечном итоге он должен ответить определенным известным сообщением. Итак, по сути, мне нужно утверждение, которое в течение некоторого промежутка времени будет игнорировать другие сообщения, но ожидать известного сообщения, например:

    [TestMethod]
    [TestCategory("Integration")]
    public async Task Should_fetch_fund_shareclass_and_details_from_test_service()
    {

        var testIsins = new HashSet<string> {"isin1", "isin2", "isin3"};

        var props = Props.Create(() => new DataFetchSupervisor());

        var actor = Sys.ActorOf(props, "fetchSupervisor");
        Within(TimeSpan.FromSeconds(30), () =>
        {
            actor.Tell(new StartDataFetch(testIsins));

            //ignore unexpected messages here

             var fetchComplteMsg = ExpectMsg<DataFetchComplete>();

        });
    }

Так что теперь это не удастся, потому что я получаю некоторые другие сообщения перед сообщением DataFetchComplete.

Как всегда, заранее спасибо за любую помощь.


person Jukka Puranen    schedule 14.09.2017    source источник


Ответы (2)


Класс Akka.TestKit имеет ряд различных версий ExcpectMsg или эквивалентных средств проверки. Вероятно, вам нужен FishForMessage. Он принимает предикат и игнорирует все входящие сообщения до тех пор, пока они не удовлетворяют условию предиката. Как только проходящее сообщение будет найдено, эта проверка будет завершена, и ваш код может быть продолжен.

person Bartosz Sypytkowski    schedule 14.09.2017
comment
Ах так, не знал об этой функции. Это тоже очень круто. Спасибо, очень признателен. - person Jukka Puranen; 14.09.2017

Вы также можете использовать метод TestKit.IgnoreMessages, который примет функция делегата, указывающая, какие типы сообщений вы хотите игнорировать, ожидая целевого сообщения.

person Aaronontheweb    schedule 14.09.2017