首页 文章

在VS2017 .Net标准库中对内部方法进行单元测试

提问于
浏览
81

我目前正在使用最新的Visual Studio 2017 Release Candidate来创建.Net Standard 1.6库 . 我正在使用xUnit对我的代码进行单元测试,并且想知道你是否仍然可以在VS2017中测试内部方法 .

我记得你可以在VS2015中使用一行AssemblyInfo.cs类来使指定的项目能够看到内部方法

[assembly:InternalsVisibleTo("MyTests")]

由于VS2017 .Net标准项目中没有AssemblyInfo.cs类,我想知道您是否还可以对内部方法进行单元测试?

3 回答

  • 5

    虽然第一个答案非常好 . 如果您觉得您仍希望在原始 AssemblyInfo 中执行此操作,则始终可以选择不自动生成文件并手动添加 .

    <PropertyGroup>
       <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    </PropertyGroup>
    

    有关更多信息:https://stackoverflow.com/a/47075759/869033

  • 126

    根据.NET docs for the InternalsVisibleToAttribute

    该属性在程序集级别应用 . 这意味着它可以包含在源代码文件的开头,也可以包含在Visual Studio项目的AssemblyInfo文件中 .

    换句话说,你可以简单地将它放在你自己任意命名的.cs文件中,它应该可以正常工作:

    // some .cs file included in your project
    using System.Runtime.CompilerServices;
    [assembly:InternalsVisibleTo("MyTests")]
    
  • 1

    "InternalsVisibleTo"属性是测试.Net的任何类型"white-box"(十年的期限,我猜)的关键 . 它可以放在任何带有"assembly"属性的c#文件中 . 请注意,MS DOC表示程序集名称必须由公钥标记限定(如果已签名) . 有时这不起作用,必须使用完整的公钥 . 访问内部是测试并发系统和许多其他情况的关键 . 见https://www.amazon.com/xUnit-Test-Patterns-Refactoring-Code/dp/0131495054 . 在本书中,Meszaros描述了各种编码风格,它们基本上构成了程序开发的方法 . 至少那些多年来一直使用它 .

相关问题