private、internal 和 friend 方法的单元测试

对于标记为 private、internal 或 friend 的方法,在包含这些方法的类的外部通常无法访问它们。 但是,单元测试可以通过 Visual Studio 工具来访问这些方法,即使单元测试文件是单独的类也可以访问。

尽管您无需编辑单元测试文件以允许这些方法,但您可以就如何处理 internal 方法和 friend 方法做出一些选择。 本文将解释这些选项,介绍在测试 private、internal 和 friend 方法时,项目中发生的情况。

提示

有关如何创建单元测试的说明,请参见针对现有代码创建并运行单元测试

提示

Visual Studio 2010 中已弃用访问器,并且 Visual Studio 的未来版本中可能不会包含访问器。

private 方法

为 private 方法创建单元测试时,将向测试项目中添加一个“测试引用”文件夹,并向该文件夹中添加一个访问器。 单元测试方法的逻辑中也将引用此访问器。

Form1_Accessor target = new Form1_Accessor(); // TODO: Initialize to an appropriate value
Dim target As Form1_Accessor = New Form1_Accessor() ' TODO: Initialize to an appropriate value

此访问器允许单元测试调用所测试代码中的 private 方法。

您可以手动创建一个访问器或重新创建一个已删除的访问器。 为此,请右击所测试的代码,指向**“创建专用访问器”**,并选择需要访问器的测试项目。

internal 方法或 firend 方法

在 C# 中为 internal 方法创建单元测试时,或者在 Microsoft Visual Basic 中为 friend 方法创建单元测试时,将出现一个对话框,从中可以选择是使用专用访问器访问 internal 方法,还是使用 InternalsVisibleToAttribute 访问 internal 方法。

提示

如果已将该特性添加到项目中,则可能不会显示该对话框。

如果选择使用 InternalsVisibleToAttribute 访问 internal 方法,则该特性将被添加到 AssemblyInfo.cs 文件中。 该特性使所测试代码中的 internal 方法对测试项目可用。 对于您为其选择了此选项的每个测试项目,都将添加一个新特性。

如果选择使用专用访问器访问 internal 方法,则您将看到上文描述的有关 private 方法的相同行为:将“测试引用”文件夹添加到测试项目中,将一个访问器添加到该文件夹中,并在单元测试方法的逻辑中引用该访问器。 在这种情况下,专用访问器提供对所测试的 internal 方法和 private 方法的访问。

如果已选择将 InternalsVisibleToAttribute 添加到项目中,则仍可以为 internal 方法创建单元测试,并改用专用访问器访问 internal 方法。 但是,必须在创建单元测试时执行此操作。 在**“创建单元测试”对话框中单击“设置”。 在“测试生成设置”对话框中,清除“允许 InternalsVisibleTo 特性”**复选框。

请参见

概念

单元测试分析

单元测试和 C++

泛型方法的单元测试