代码之家  ›  专栏  ›  技术社区  ›  Lieutenant Frost

如何对不同的类访问级别进行单元测试?

  •  4
  • Lieutenant Frost  · 技术社区  · 17 年前

    我承认-在单元测试方面,我完全是个新手。我可以很容易地掌握这些概念(测试一件事,中断修复测试重复等),但我有一个问题,让我的思想围绕这件事……

    我的任务是重写我们的应用程序的一大部分,并且我已经很好地完成了类结构的编写。我们将测试项目与解决方案的其余部分直接混合在一起,并且所有引用都按照我们想要的方式排列。不幸的是,有几个朋友类只能从同一个命名空间中访问。现在,测试类不是该命名空间的成员,因此我无法直接访问任何这些底层方法,这些方法 真的? 需要测试。

    从我读到的内容来看,我可以创建一个有关类的公共模型并以此方式进行测试,但我担心,在这条路上,会有人更改生产代码,而不是将其复制到测试代码中,完全破坏了测试的目的。另一种选择是更改类本身的访问级别,但这将涉及大量开销,并篡改已经存在的代码。编写一个接口的想法也出现了,但是为了测试而创建一个完整的接口结构并没有在管理中发挥作用。

    我是不是错过了什么?在不改变对基础类的访问的情况下,确保这些基础类确实正常工作的最佳方法是什么?

    3 回复  |  直到 17 年前
        1
  •  3
  •   krosenvold    17 年前

    您还可以使测试主题的子类与测试主题位于同一命名空间中,并且子类可以公开测试所需的任何特性。

    假设您有某种方法给这个子类一个“测试”范围,那么您就可以免费回家了。(您不希望这个类出现在常规代码中,因为它破坏了封装)

        2
  •  4
  •   Igal Tabachnik    17 年前

    我不确定您是否提到.NET/C项目,但是您可以添加 InternalsVisibleTo 属性,以公开 internal 类到单元测试程序集。

    假设您创建了一个名为“myapplication.test s”的单元测试项目,将其添加到“myapplication”项目assemblyinfo.cs文件中(位于“properties”下):

    [assembly: InternalsVisibleTo("MyApplication.Tests")]

        3
  •  0
  •   jcollum    17 年前

    我认为你的单元测试不应该 要求 任何源代码,所以第一个答案肯定有效。你考虑过使用反射吗?我认为它可以改变源代码;这里有一个很好的讨论: CodeProject