从FirstAsync()创建可观察的Return()

时间:2017-06-12 13:47:45

标签: c# unit-testing system.reactive

在我当前的项目中,我的Test's Assert在第一个OnNext发生之前就已经出现了问题。如何在断言之前等待第一个结果?

Google建议使用TestScheduler。相关文档(like this SO)似乎表明我知道或关心时间值,我不知道。

我也尝试过等待pipeline.SqlStatements.FirstAsync(),但是这阻止了整个测试并且什么都没有返回。

[TestMethod]
public void Process_Fileinfos_BatchesHaveSql()
{
    var output = new List<string>();
    var templates = new[] {new FileInfo(@"DropDatabase.txt")};

    var pipeline = new TemplatesPipeline();
    pipeline.SqlStatements.Subscribe(value => output.Add(value));
    pipeline.Process(templates);

    var expected = "dropdatabasescriptcontent";

    Assert.AreEqual(expected, output.First());
}

不确定如何在这里取得进展。

1 个答案:

答案 0 :(得分:0)

如果您在SqlStatements获得OnNext之前很乐意阻止,请使用:

Assert.AreEqual(expected, pipeline.SqlStatements.FirstAsync().Wait());

如果您没有得到任何东西,或者想要暂停,您需要使用不同的方法。