Phi*_*ray 128 c# unit-testing visual-studio-2017 .net-standard
我目前正在使用最新的Visual Studio 2017 Release Candidate来创建.Net Standard 1.6库.我正在使用xUnit对我的代码进行单元测试,并且想知道你是否仍然可以在VS2017中测试内部方法.
我记得你可以在VS2015中使用一行AssemblyInfo.cs类来使指定的项目能够看到内部方法
[assembly:InternalsVisibleTo("MyTests")]
Run Code Online (Sandbox Code Playgroud)
由于VS2017 .Net标准项目中没有AssemblyInfo.cs类,我想知道您是否还可以对内部方法进行单元测试?
Gro*_*roo 192
根据.NET文档InternalsVisibleToAttribute:
该属性在程序集级别应用.这意味着它可以包含在源代码文件的开头,也可以包含在Visual Studio项目的AssemblyInfo文件中.
换句话说,你可以简单地将它放在你自己任意命名的.cs文件中,它应该可以正常工作:
// some .cs file included in your project
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleTo("MyTests")]
Run Code Online (Sandbox Code Playgroud)
虽然第一个答案是完全可以的。如果您仍然希望以原始AssemblyInfo格式执行此操作,则可以始终选择不自动生成文件并手动添加它。
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
有关更多信息:https : //stackoverflow.com/a/47075759/869033
如此处所述:
https://blog.sanderaernouts.com/make-internals-visible-with-new-csproj-format
可以通过添加另一个ItemGroup在项目文件中添加内部可见属性:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(AssemblyName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
甚至:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(MSBuildProjectName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我喜欢该解决方案,因为项目文件似乎是定义此类问题的正确位置。
小智 5
"InternalsVisibleTo"属性是测试.Net的任何类型"白盒子"(十年的术语,我猜)的关键.它可以放在任何带有前面"assembly"属性的c#文件中.请注意,MS DOC表示程序集名称必须由公钥标记限定(如果已签名).有时这不起作用,必须使用完整的公钥.访问内部是测试并发系统和许多其他情况的关键.请参阅https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054.在本书中,Meszaros描述了各种编码风格,它们基本上构成了程序开发的"设计测试"方法.至少这是我多年来使用它的方式.
| 归档时间: |
|
| 查看次数: |
30725 次 |
| 最近记录: |