使用 .NET 4.0 进行异步单元测试

Asynchronous unit tests with .NET 4.0

我有一套相当标准的单元测试。

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public async Task MyClass_DoesStuff()
    {
        //...
        await foo;
    }
}

一切正常,但后来我需要降级到 .NET 4.0。我进行了必要的软件包安装并构建了所有内容。但是,现在我的单元测试不再有效。相反,我得到了这些错误:

UTA007: Method MyClass_DoesStuff defined in class MyTestClass does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, return-type as void and should not take any parameter. Example: public void Test.Class1.Test(). Additionally, return-type must be Task if you are running async unit tests. Example: public async Task Test.Class1.Test2()

也许测试运行程序无法识别 System.Threading.Tasks.Task for .NET 4.0?我从 NuGet 安装了 Microsoft AsyncMicrosoft BCL Build ComponentsMicrosoft BCL Portability Pack

有没有办法让我进行 .NET 4.0 的异步单元测试?

编辑:

"duplicate" 这被标记为 (TestMethod: async Task TestSth() does not work with .NET 4.0) 是因为测试没有出现在测试资源管理器中,而在我的情况下,我在发布时遇到了错误。不是重复的。

asyncawait 是在 .NET 4.5 中引入的,因此您将无法在 .NET 4.0 中使用该语法。但是,我记得,Tasks 是在 .NET 4.0 中引入的,因此您可能可以直接使用 Task 来完成您的任务。

[TestMethod]
public Task MyClass_DoesStuff()
{
    Task<Foo> foo = GetSomethingAsync();
    var result = foo.Result;
}

最简单的解决方案是让您的单元测试项目以 .NET 4.5 为目标。这样,MSTest 将原生支持异步单元测试。