使用*_Accessor对私有成员进行单元测试

本文关键字:成员 单元测试 Accessor 使用 | 更新日期: 2023-09-27 18:29:57

我目前正在VS2010中开发C#解决方案。

为了为我的业务流程编写足够的单元测试,我使用Accessor方法来访问和更改我的业务对象的内部。

我的TFS构建服务器上出现的问题是,现在我已经在许多其他测试程序集中向我的objet程序集添加了访问器,当我的测试运行并没有通过所有测试时,有些测试失败,并发出以下警告:

…<测试失败消息>。。。…无法加载文件"ObjectLibrary_Accessor,版本=0.0.0.0,Culture=neutralm PublicKeyToken=ab391acd9394'或其依赖项之一。。。。。。。

我认为问题在于,在编译每个测试程序集时,都会使用不同的强名称创建ObjectLibrary_Accessor.dll。因此,当编译某些测试时,即使dll位于预期位置,强名称检查也会失败,并出现上述错误。

我看到了很多选择,没有一个特别有吸引力,其中包括:

  1. 未使用访问器方法(_A)
  2. 为每个测试程序集设置不同的XX_Accessor.dll-是否可以更改生成的程序集的名称以避免冲突
  3. 更改我的集成构建,为每个测试项目使用不同的二进制文件文件夹(如何?)
  4. 其他我不知道的选择

我对人们对这个问题、解决方案和解决方案的任何建议或经验都很感兴趣(尽管我没有时间更改代码,所以选项1不是我的最爱)。

使用*_Accessor对私有成员进行单元测试

正如您所看到的,Accessor方法有点脆弱。

通过使用InternalsVisibleTo assembly属性,可以使内部项对测试代码可见。

如果你想获得私有方法,并且你使用的是.NET 4.0,那么可以考虑使用像Trespasser这样的东西来简化这一点。

有关更多选项,请参阅此问题的答案:如何对私有方法进行单元测试?