TestMethod:AsynchronoustaskTestSth()isnotavailablefor.NET4.0我正在尝试使用.NET4.0BCL运行异步测试方法异步和MsTest。由于测试用例资源管理器中缺少条目,此设置似乎无法处理[TestMethod]asyncTaskTestSth()。将签名改为asyncvoid后,我可以运行测试用例但是结果是错误的(完全没有报错)。我已经看到使用TFS2010运行异步任务单元测试的问题,但我认为应该有更漂亮的方法来执行此操作。有什么建议么?您只能将async关键字与针对.NET4.5的MSTest引用类库一起使用。如果你因为某些原因不能使用.NET4.5,那么你只需要手动等待任务。即使生产代码(即被测代码)不能使用.NET4.5,为什么测试项目不能这样做?如果您已经可以访问VS2012+,那么.NET4.5将安装在您的开发计算机上。这是对我有用的解决方法。弄清楚有点棘手,但最后我的.NET4.0库的所有单元测试都被检测到并出现在测试资源管理器中,运行并交付,它们都被写成普通的异步任务方法,没有什么特别的测试运行器、包装器或第三方依赖项。将单元测试项目的目标框架更改为.NET4.5。从单元测试项目中删除Microsoft.Bcl、Microsoft.Bcl.Build和Microsoft.Bcl.AsyncNuGet包引用。如果您还没有添加这些引用,只需将它们添加到您的单元测试项目中即可。将System.Runtime.dll和System.Threading.Tasks.dll作为项目根目录下的链接文件添加到单元测试项目中。在解决方案资源管理器中右键单击您的单元测试项目。添加>现有项目...浏览到您的解决方案的包文件夹,找到Microsoft.Bcl的net40包文件夹;例如,...packagesMicrosoft.Bcl.1.1.10libnet40在文件类型下拉列表中选择所有文件(*.*)。按住Ctrl键并左键单击System.Runtime.dll和System.Threading.Tasks.dll以将其选中。单击添加按钮上的小下拉箭头。(不要单击“添加”按钮。)在“添加”按钮的下拉列表中,单击“添加为链接”。这两个程序集现在都在项目的根目录中可见。在解决方案资源管理器中选择两个链接的程序集文件(Ctrl+左键单击),或者对每个文件单独执行以下步骤。右键单击任何选定的文件并选择属性。“属性”窗口打开。将Copytooutputdirectory字段设置为Copyifnewer。您的单元测试项目文件现在应该包含类似于以下内容的内容。System.Runtime.dllPreserveNewestSystem.Threading.Tasks.dllPreserveNewest就这样!请记住,您的单元测试项目以.NET4.5(或更高版本,如果您愿意)为目标,因此单元测试可以使用异步方法和任何其他.NET4.5功能。与您正在测试的.NET4.0程序集不应该有任何冲突,但如果您确实发现冲突,可能是因为您正在为新的Framework/C#函数重新定义某些类型并将它们公开,从而在您尝试时导致冲突在单元测试中使用相同的类型。最好的解决方案是简单地将这些类型设置为您正在测试的项目的内部。编辑:执行这些步骤后,您可能会收到一些构建警告:所有引用My.csproj的项目都必须安装nuget包Microsoft.Bcl.Build。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=317569{root}packageMicrosoft.Bcl.Build.1.0.21buildMicrosoft.Bcl.Build.targets要避免这些警告,只需编辑单元测试项目并将以下元数据元素添加到每个指向引用Microsoft.Bcl.Build的项目的项目引用。SkipValidatePackageReferences=true示例:{664a9e98-fac7-4567-a046-0dde95fddb48}pclSkipValidatePackageReferences=true完整说明可以在Microsoft.Bcl.Build包中包含的.targets文件中找到。为了您的方便,这里是完整的评论。BclBuildValidateNugetPackageReferences此目标验证当前项目中安装的任何Nuget包是否也安装在引用当前项目的项目中。这是必要的,因为Nuget包包含的不仅仅是简单的引用。安装包确保1.添加目标框架的正确引用集2.应用配置文件转换3.如果包ID为当前项目安装的所有包运行项目安装脚本与@(ValidatePackages)匹配的指定包匹配,确保引用的项目中安装了相同的包。通过为引用设置SkipValidatePackageReferences=true可以为项目引用禁用此目标:{664a9e98-fac7-4567-a046-0dde95fddb48}pclSkipValidatePackageReferences=true通过添加以下内容可以为项目的所有引用禁用此目标:教程:TestMethod:异步任务TestSth()不适用于.NET4.0共享的所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多多关注—真联系管理员删除。如需转载请注明出处:
