我跳进的单元测试这些工作室2008年的方式,并且我想知道什么是最好的方式来完成的交会 class 访问测试的目的。

基本上,我有两个项目中的一个解决方案:

  1. MyProject(C#)
  2. MyProjectTests(C#试验项目)

一切都在MyProject目前已经默认无障碍的,如果我记忆正确意味着一切都是有效的 internal.我主要是想要测试的 class 水平,但也有一些 delegates 参与。

有可能会被外部API在未来的某个时候,但我大约20%的办法,以功能完整的(至少在纸上)和我变得相当持怀疑态度的分层代码顶上的这个未经试验的核心。因此,我想现在做一些测试之前的程序是完全不够用传统的(阅读:坏和/或懒惰的)功能测试和确定地前的版本n+1个外API。

此外,一个直接的答案,例的解决方案将是极大的赞赏。

有帮助吗?

解决方案

您可以使用程序集级属性 InternalsVisibleToAttribute 实现这一目标。

添加

[assembly:InternalsVisibleTo("MyProjectTests")]

到MyProject程序集中的AssemblyInfo.cs。

其他提示

您可以通过向主项目的AssemblyInfo.cs添加属性来测试内部方法,从而可以访问命名程序集的内部方法:

[组件:InternalsVisibleTo(QUOT; MyProjectTestsNameSpace.MyProjectTests&QUOT)]

更多信息,请此处

您需要添加

[assembly:InternalsVisibleTo("Unit.Tests.Assembly")] 

到你的“MyProject(C#)”的AssemblyInfo.cs。然后,您的测试可以访问内部测试方法。

看起来你需要 InternalsVisibleToAttribute

但是我建议不要采用这种方法 - 通过公共接口或API测试你的内部类。

虽然 [InternalsVisibleTo] 是最明智的办法国际海事组织,至少存在2个其他方式去这样的:

  • 通过使用 反射

     var method = instance.GetType().GetMethod(
        methodName, BindingFlags.NonPublic | BindingFlags.Instance, 
        null, paramTypeArray, null);
     return method.Invoke(instance, parameters);
    

这种方法的问题是,如果方法的名称或签名的变化,该单元的测试将开始未能在运行时间,而 [InternalsVisibleTo] 会很容易地被拿起这种裂变化在编译时间。

我发现这个 https://msdn.microsoft.com/en-us/library/hh598957.aspx 希望它能帮助别人。

摘要:

  • 在你的单元试验项目,增加一个参考代码进行测试。这里是如何创建的参考代码项目在同一解决方案:
  • 选择项目在解决方案。
  • 该项目的菜单中选择加入参考。
  • 在参考经理对话框中打开解决方案的节点和选择项目。
  • 检查代码项目名称和密切的对话框。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top