无法在受保护方法的单元测试的适当方法之间做出决定

时间:2016-07-19 08:55:18

标签: c# asp.net unit-testing testing

免责声明:我知道在最佳世界中,我们只从界面测试公众。然而,实际上,我们经常有一个先前存在的代码库,这个代码库不是在TDD下开发的,因此需要采用更灵活的方法。

我想为ASPX页面设计测试方法( blobb.aspx.cs ),因为它没有使用接口来继承,并且有一些逻辑无法重构,我必须访问并测试它的受保护方法。我做了googlearch并得出了两个不同的建议。

  1. 如图所示in this example继承和测试。
  2. 强制访问其他程序集in this example
  3. 第一种方法似乎是广泛建议的,并且有大量的博客在谈论以及SO推荐它的答案。所以似乎有一个关于这个主题的概念。然而,第二种方法似乎在技术上是最合适的,并且在社区中有一个默认的支持,只有在网络上非常稀少地提到的唯一的眉毛提升器。我没有找到任何比较,将两者相互对立,也没有任何理由在哪种情况下更合适。

    因此,我问。

1 个答案:

答案 0 :(得分:1)

从我在MSDN上阅读的内容来看,您可以自动为您生成私有访问者或InternalsVisbleTo

  

在C#或a中为内部方法创建单元测试时   在Microsoft Visual Basic中的朋友方法,出现一个对话框   允许您选择访问内部方法   使用私有访问者或使用InternalsVisibleToAttribute。

     

来自:https://msdn.microsoft.com/en-us/library/bb385974(VS.100).aspx

但后来我读到了:

  

在Visual Studio 2010中已弃用Accessor   将不会包含在Visual Studio的未来版本中。

     

来自:https://msdn.microsoft.com/en-us/library/dd293546(v=vs.100).aspx

显然,您仍然可以使用自己的访问器,但这本身就是一项开发工作。即使自动生成一个继承的类也会很痛苦。而你只是在创造一个元bug的来源。

所以听起来像InternalsVisibleTo是要走的路,也许你将受保护的方法改为"受保护的内部"。通过这种方式,您可以访问它们,而无需为要隐藏的元错误创建另一个测试表面。