关于c#:无法在适当的方法之间决定受保护方法的单元测试

Can't decide between appropriate approach to unit testing of protected methods

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

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

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

    因此,我问。


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

    When you create a unit test for an internal method in C# or for a
    friend method in Microsoft Visual Basic, a dialog box appears that
    allows you to choose between having your internal methods accessed
    with the private accessor or with the InternalsVisibleToAttribute.

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

    但后来我读到:

    The use of Accessors has been deprecated in Visual Studio 2010 and
    will not be included in future versions of Visual Studio.

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

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

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