C# TestMethod:async Task TestSth()不适用于.NET 4.0
我正在尝试使用.NET4.0BCL Async和MsTest运行异步测试方法 由于测试用例资源管理器中缺少条目,此设置似乎无法处理[TestMethod]asyncTaskTestSth()。将签名更改为asyncvoid后,我可以运行测试用例,但结果错误(不会报告任何错误) 我已经看到了一个尝试,但我认为应该有一个更好的方法来解决这个问题C# TestMethod:async Task TestSth()不适用于.NET 4.0,c#,unit-testing,.net-4.0,async-await,mstest,C#,Unit Testing,.net 4.0,Async Await,Mstest,我正在尝试使用.NET4.0BCL Async和MsTest运行异步测试方法 由于测试用例资源管理器中缺少条目,此设置似乎无法处理[TestMethod]asyncTaskTestSth()。将签名更改为asyncvoid后,我可以运行测试用例,但结果错误(不会报告任何错误) 我已经看到了一个尝试,但我认为应该有一个更好的方法来解决这个问题 有什么建议吗?您只能将async关键字与MSTest引用类库一起使用,目标是.NET 4.5 如果您出于任何原因不能使用.NET4.5,那么您只能忍受手动等
有什么建议吗?您只能将
async
关键字与MSTest引用类库一起使用,目标是.NET 4.5
如果您出于任何原因不能使用.NET4.5,那么您只能忍受手动等待任务
即使生产代码(即测试中的代码)不能使用.NET4.5,为什么测试项目不能这样做?如果您已经有VS 2012+可用,那么.NET 4.5将安装在您的开发机器上。这里有一个适合我的解决方法。要弄清楚这一点有点棘手,但最后,所有针对.NET 4.0库的单元测试都被检测到,并显示在测试资源管理器中,运行和传递,它们都是作为正常的
异步任务
方法编写的,没有任何特殊的测试运行程序、包装器或第三方依赖项
- 是的,即使项目引用了您正在测试的目标.NET 4.0,您也必须这样做
- 必须将程序集链接保留在项目的根目录下。不要将它们移动到子文件夹中
- 如果您的项目受源代码管理,那么您可能会注意到这些链接文件被标记为已排除(如果不是,则应排除)。这些文件所在的NuGet packages文件夹不应签入源代码管理。因为它们仅仅是链接文件,所以任何人在恢复其NuGet软件包后都应该不会有任何问题
<ItemGroup>
<Content Include="..\..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Runtime.dll">
<Link>System.Runtime.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="..\..\packages\Microsoft.Bcl.1.1.10\lib\net40\System.Threading.Tasks.dll">
<Link>System.Threading.Tasks.dll</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
例如:
<ProjectReference Include="..\pcl\pcl.csproj">
<Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
<Name>pcl</Name>
<Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>
{664a9e98-fac7-4567-a046-0dde95fddb48}
pcl
SkipValidatePackageReferences=true
完整的解释可以在Microsoft.Bcl.Build软件包附带的noted.targets文件中找到。为了您的方便,下面是完整的评论
BclBuildValidateNugetPackageReferences
此目标验证当前项目中安装的所有Nuget软件包是否也安装在项目中
引用当前项目
这是必要的,因为Nuget包包含的不仅仅是简单的引用。安装软件包可确保1.添加了目标框架的正确引用集
2.已应用配置文件转换
3.运行项目安装脚本 对于在packages config中列出为当前项目安装的所有包,如果包ID与@(ValidatePackages)中指定的包ID匹配,请确保在引用项目中安装了相同的包 通过为引用设置SkipValidatePackageReferences=true,可以为项目引用禁用此目标:
{664a9e98-fac7-4567-a046-0dde95fddb48}
pcl
SkipValidatePackageReferences=true
通过添加以下内容,可以对项目的所有引用禁用此目标:
真的
您所说的“测试用例浏览器中缺少条目”是什么意思?您的异步测试方法必须返回任务,而不是void。VS2010只是没有内置的对异步[TestMethod]
的支持。除了你提到的Stephen's,为什么你认为VS2010还有更好的方法?对于VS2012+(以及TFS2012+),有内置的支持。感谢您的评论!我已经在使用VS 2013,但以.NET 4.0为目标,异步任务方式是不可能的。这就是我所说的“缺少条目”——我根本无法启动测试用例@Noseratio:Stephen的解决方案还可以-我只是在寻找另一个“神奇”NuGet包之类的解决方案,而不是包装每个测试方法;-)@菲利浦,我不明白为什么不可能。async
关键字不会更改
<ProjectReference Include="..\pcl\pcl.csproj">
<Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
<Name>pcl</Name>
<Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>
<ProjectReference Include="..\pcl\pcl.csproj">
<Project>{664a9e98-fac7-4567-a046-0dde95fddb48}</Project>
<Name>pcl</Name>
<Properties>SkipValidatePackageReferences=true</Properties>
</ProjectReference>
<PropertyGroup>
<SkipValidatePackageReferences>true</SkipValidatePackageReferences>
</PropertyGroup>