当前位置:  开发笔记 > 编程语言 > 正文

C# - 从项目的发布版本中排除单元测试

如何解决《C#-从项目的发布版本中排除单元测试》经验,为你挑选了4个好方法。

您通常如何分离代码库和相关的单元测试?我知道有人为单元测试创​​建了一个单独的项目,我个人觉得这个项目令人困惑且难以维护.另一方面,如果您将代码及其测试混合在一个项目中,您最终会得到与您的单元测试框架(无论是NUnit,MbUnit还是其他任何内容)相关的二进制文件以及您自己的二进制文件.

这对于调试很好,但是一旦我构建了发布版本,我真的不希望我的代码再次引用单元测试框架.

我找到的一个解决方案是将所有单元测试都包含在#if DEBUG - #endif指令中:当没有代码引用单元测试程序集时,编译器足够聪明,可以省略编译代码中的引用.

有没有其他(可能更舒适)的选择来实现类似的目标?



1> Galwegian..:

我绝对主张将你的测试分成一个单独的项目.这是我认为的唯一方法.

是的,正如加里所说,它也迫使你通过公共方法测试行为,而不是玩你班级的内脏


它还会强制您通过公共方法测试行为,而不是使用类的内部.双重奖金imo.

2> Morten Chris..:

正如其他人所指出的那样,一个单独的测试项目(对于每个正常项目)是一个很好的方法.我通常镜像命名空间并为每个普通类创建一个测试类,并在名称后附加'test'.如果您拥有可以在另一个项目中自动生成测试类和方法的Visual Studio Team System,则可直接在IDE中支持此功能.

如果要使用"内部"访问器测试类和方法,需要记住的一件事是将以下行添加到要测试的每个项目的AssemblyInfo.cs文件中:

[assembly: InternalsVisibleTo("UnitTestProjectName")]


如果您对程序集进行强名称(如您所愿),那么您还需要将公钥长字符串添加到声明中.注意:强命名不是对内部第三方链接的保护,因为仍然可以通过反射访问它们.

3> Rikalous..:

v2之后的.Net框架具有一个有用的功能,您可以使用InternalsVisibleTo属性标记程序集,该属性允许程序集被另一个访问.
一种装配隧道功能.



4> 小智..:

在文件中使用编译器指令或创建单独项目的另一种替代方法仅仅是在项目中创建其他.cs文件.

通过项目文件本身的一些魔力,您可以指示:

    nunit.framework DLL仅在调试版本中引用,并且

    您的测试文件仅包含在调试版本中

示例.csproj摘录:



   ...

   
      False
      ..\..\debug\nunit.framework.dll
   

   ...

   

   ...

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有