单元测试异步事件处理程序

3
[TestInitialize]
public void Initialize()
{
    //DO Something
    async_eventhandler += the_eventhandler(async_eventhandler);
}

private void async_eventhandler
{
test = test2
    // test2 comes from client, after here TestMethod have to start
}

[TestMethod]
public void TestMethod1()
{
    Assert.AreEqual("test_test", test);
}

单元测试失败,因为方法是异步的。字符串 test 是“NULL”,因为值 test2 比它晚出现。我该如何解决这个问题?

1个回答

0

有几个选项:

  1. Assert.AreEqual之前,您可以插入Thread.Sleep(MaxTimeoutForEvent)
  2. 使用延迟断言。 可在此question中找到示例

P.S. 记得关于TestCleanup :)


1.) Thread.Sleep -> 它不起作用。 2.) 我无法解释这段代码,我该如何在我的示例中使用它。 - Sell Su
你确定 async_eventhandler 在 TestMethod 开始后被调用了吗? - Evgeniy Mironov
使用NUnit:Assert.That("test_test", Is.EqualTo(test).After(3000));也无法正常工作。TestInit和TestMethod开始同步。TestMethod必须等待TestInit,但它们没有这样做。 - Sell Su
[TestMethod] public void TestMethod1() { // 如果我使用 MessageBox.Show("2"),并等待点击消息框,直到事件 async_eventhandler 结束,那么我就可以得到正确的字符串 test 并且测试通过 :) 但我不想使用 message.box :) NUnit.Framework.Assert.That("test_test", Is.EqualTo(test).After(3000)); } - Sell Su
我还没有正确的答案。测试方法必须等待通知事件。但我该怎么做呢? - Sell Su

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接