5

我在测试中有以下代码:

 private void LoadIncomeStatementViewModel()
    {
        using (var evt = new AutoResetEvent(false))
        {
            EventHandler handler = (sender, e) => evt.Set();

            _incomeStatementViewModel.Loaded -= handler;
            _incomeStatementViewModel.Loaded += handler;
            _incomeStatementViewModel.LoadDataCommand.Execute(null);
            evt.WaitOne();
        }
    }

现在,如果我运行以下测试

[Test]
public void Test()
{
   LoadIncomeStatementViewModel();
   // do something

   LoadIncomeStatementViewModel();
   // do something
}

第二次调用 LoadIncomeStatementViewModel() 我在 EventHandler handler = (sender, e) => evt.Set();

当第二次重新运行该方法时,使用语句肯定已经重新初始化了 evt。我有一种感觉,这可能与 Resharper Test Runner (Nunit 2.7) 有关。

4

1 回答 1

3

您需要取消链接处理程序,如下所示。否则,在第二次运行中,您将收到第一个实例。

private void LoadIncomeStatementViewModel()
{
    using (var evt = new AutoResetEvent(false))
    {
        EventHandler handler = (sender, e) => evt.Set();

        try
        {
            _incomeStatementViewModel.Loaded += handler;
            _incomeStatementViewModel.LoadDataCommand.Execute(null);
            evt.WaitOne();
        }
        finally
        {
            _incomeStatementViewModel.Loaded -= handler;
        }
    }
}
于 2013-01-03T17:43:58.863 回答