如何使用akka.net testkit期待一些消息并忽略其他消息?

时间:2017-09-14 07:26:33

标签: testing akka.net

我测试了一个可能会响应某些意外消息的actor,但最终它必须使用特定的已知消息进行响应。 所以本质上我想要一个断言,它会在某个时间内忽略其他消息但是期望一条已知消息,如下所示:

    [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消息之前得到了一些其他消息。

一如既往,提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Akka.TestKit类有许多不同版本的ExcpectMsg或等效的检查器。您正在寻找的那个可能是FishForMessage。它需要一个谓词并且将忽略所有传入的消息,只要它们不能通过谓词的条件。一旦发现传递消息,该检查将完成,您的代码可能会继续。

答案 1 :(得分:1)

您还可以使用TestKit.IgnoreMessages方法,该方法将接受委托功能,指定在等待目标消息时您希望忽略哪些类型的消息。