2012-04-03 98 views
1
私有成员

我目前工作的一个C#解决方案在VS 2010单元测试使用* _Accessor

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

现在我的TFS构建服务器上出现了一些问题,我在其他测试程序集中添加了Accessors到我的objet程序集,当我的测试运行不是所有的测试程序时,有些程序失败时出现警告作者:

 
... <Test failed message> .... 
... Could not load file 'ObjectLibrary_Accessor, Version=0.0.0.0, 
     Culture=neutralm PublicKeyToken=ab391acd9394' or one of its dependencies. 
... 
... 

我相信问题是,因为每个测试程序集编译一个ObjectLibrary_Accessor.dll被创建一个不同的强名称。因此,当编译一些测试时,强名称检查将失败并出现上述错误 - 尽管dll处于预期位置。

我看到许多选项,其中没有一个是特别有吸引力的,这些包括:

  1. 不使用_Accessor方法。
  2. 为每个测试程序集设置不同的XX_Accessor.dll - 是否可以更改生成的程序集的名称以避免冲突?
  3. 将我的集成版本更改为对每个测试项目使用不同的二进制文件夹(如何?)
  4. 其他选项我不知道?

我会对任何有关此问题,解决方案和解决方法的建议或经验感兴趣(尽管我没有时间更改我的代码,因此选项1并不具有代表性)。

回答

3

如您所见,Accessor方法有点脆弱。

通过使用InternalsVisibleTo程序集属性,可以使内部项对您的测试代码可见。

如果你想获得私有方法并且你正在使用.NET 4.0,那么考虑使用类似Trespasser的东西来简化它。

如需更多选项,请参阅此问题的回答:How do you unit test private methods?