在MSTest中,[Shadowing]
属性可帮助您从另一个程序集中对单个方法进行单元测试。以下是相关链接:What is the Shadowing attribute that the VS uses when it generates unit tests?
我的问题是:
internal
只是为了使其可用于某些其他测试项目/程序集中的单元测试,这是一种很好的(?)实践吗? (使用InternalsVisibleTo
)答案 0 :(得分:4)
更新(如何定义要测试的内容): 理想情况下(在测试优先方法中)测试是您班级的第一个用户。当您编写测试时,您会尝试想象用户将如何使用您的课程。用户不会与私人方法交互(反思是作弊)。因此,作为班级的第一个用户,您的测试不应与私有方法进行交互。
答案 1 :(得分:2)
简要回答您的问题:
一般来说,他们不应该。大多数情况下,您的私有位将在测试类合同/公共API时进行测试。对于时间这是不可能的,测试私有方法就像其他任何单元测试一样。
这很常见。虽然改变可见性可能被认为是坏主意,但当它仅仅改变为内部时,它并没有那么糟糕。然而,在像TDD这样的方法中,测试的需要通常会以这样的方式驱动你的设计,以至于不需要这样的“黑客”。但就像我说的那样,这是相当普遍的 - 你不应该过多担心它,除非它达到荒谬的程度(比如暴露的整个私人部分)。
只要它测试你班级的单个单元(或one logical concept),它就是单元测试。私有方法通常被创建为公共部分中的重构结果,大多数情况下,这些结构将由单个单元测试作为目标。如果您认为私有方法不再是单元,则可能是重构调用。
答案 2 :(得分:1)
我希望通过公共可用的电话来练习所有私人方法。必须有一条路径来执行公共呼叫中的每条专线,如果不存在,则可以删除该代码。
使用内部而不是私有可能会以一团糟的方式结束,我不会使用这种方法。
答案 3 :(得分:0)
作为Java开发人员,我这样做。我也没有改变访问级别。我使用反射来访问私有方法。我不必将它授予我的用户,我也不必向他们展示我的单元测试。
这是Java的一个肮脏秘密:您始终可以通过反射来规避访问限制。我不知道C#和.NET是否也是如此,但您可以查看它。