1

我想为 My ViewModel 类中的一些命令编写一些单元测试。我想测试ICommand的执行。

我的ICommand.Execute()方法执行异步方法。

我怎样才能为这个命令写一个测试用例?

注意:我正在使用 Visual Studio 2012 Update 2 的 CTP2 中提供的 Windows Phone 单元测试框架http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/31/windows-phone-unit-tests -in-visual-studio-2012-update-2.aspx

4

3 回答 3

2

async Task测试方法要容易得多;也就是说,让您的async void Execute实现只是await一种async Task方法,它实际上是经过单元测试的方法。

内置的 MSTest 单元测试框架不支持测试async void方法,因为它有点复杂并且会引发向后兼容性问题。目前,NUnit 是唯一支持async void方法的单元测试框架。

如果您真的想测试一个async void方法并且不想使用 NUnit,您可以使用Stephen ToubAsyncPumpAsyncContext的(可在 NuGet 上获得)为每个单元测试创​​建自己的上下文。在这种情况下,您的测试将类似于:

[TestMethod]
public void TestMyAsyncVoidMethod()
{
  ICommand myCommand = ...;

  AsyncContext.Run(() =>
  {
    myCommand.Execute();
    Assert.IsTrue(command-is-in-progress);
  });

  Assert.IsTrue(command-completed);
}
于 2013-02-13T15:08:52.130 回答
0

您应该将测试方法签名更改为

[TestMethod] public async Task TestMyAsyncVoidMethod() {....

这样您就可以等待您的命令执行方法。

于 2014-10-01T14:08:13.077 回答
0

我假设你会用[Asynchronous]属性标记方法,然后调用await ICommand.Execute()

查看这篇文章以获取异步 Windows Phone 方法测试的示例。

于 2013-02-13T11:37:23.230 回答