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

Posted

技术标签:

【中文标题】无法在对受保护方法进行单元测试的适当方法之间做出决定【英文标题】:Can't decide between appropriate approach to unit testing of protected methods 【发布时间】:2016-11-22 01:38:36 【问题描述】:

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

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

    在in this example 中进行继承和测试。 强制访问其他程序集,如图in this example。

第一种方法似乎是最广泛建议的方法,并且有大量博客在讨论以及关于 SO 推荐它的答案。所以似乎对这个问题有一个共识。然而,第二种方法在技术上似乎是最合适的,并且得到了社区的强烈支持,这是唯一一个在网络上很少提及的眉毛提升器。我没有发现任何将两者相互对比的比较,也没有发现在什么情况下更合适的推理。

因此,我问。

【问题讨论】:

AFAIK,InternalsVisibleToAttribote 无论如何都不会让您访问受保护的成员。 @dymanoid 哦,那它有什么作用呢?那么我链接到的答案(第 2 号)呢? 允许访问internal 方法。因此,您需要将要测试的所有 protected 成员更改为 internal,这可能会破坏任何继承结构。 @toadflakz 实际上,我意识到我的陈述不清楚。没有必要用 substitute protected 代替 internal 因为有一个访问修饰符 protected internal,它(同样令人惊讶听起来)是listed by MS as a different one,而不是其他两个(尽管区别非常小)。 【参考方案1】:

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

当您在 C# 中为内部方法或为 在 Microsoft Visual Basic 中使用friend 方法,会出现一个对话框 允许您在访问内部方法之间进行选择 使用私有访问器或使用 InternalsVisibleToAttribute。

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

但后来我读到:

在 Visual Studio 2010 和 将不会包含在 Visual Studio 的未来版本中。

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

显然,您仍然可以滚动自己的访问器,但这完全是一项开发工作。即使自动生成继承的类也会很痛苦。而且您只是在创建元错误的来源。

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

【讨论】:

以上是关于无法在对受保护方法进行单元测试的适当方法之间做出决定的主要内容,如果未能解决你的问题,请参考以下文章

受保护插槽的单元测试[关闭]

如何在 Excel 2013 中对受保护的工作表启用排序

使用 id_token 对受广告保护的应用进行身份验证

如何通过phpunit对一个方法进行单元测试,该方法具有多个内部调用保护/私有方法?

私有/受保护的方法是不是应该进行单元测试? [关闭]

SQLiteCantOpenDatabaseException:未知错误(代码 14):无法打开数据库(仅在对应用程序进行单元测试时)