2012-09-07 62 views
0

目前我想做一个需要100%功能覆盖的UT覆盖。 我的应用程序中有一个名为FunctionParser.cs的公共类,它在内部使用由第三方提供的名为Autocomplete的内部类。现在问题在于没有经过测试的自动完成类中的功能很少。因此,为了实现这个名为“AutoComplete”的内部类的覆盖率,我试图使用反射,但没有任何作品可以让我有人告诉我如何使用反射来访问这个内部类以用于测试目的。通过反射访问内部类

注意:我无法修改由第三方提供的内部类AutoComplete.CS,因此除了使用Get [InternalsVisibleTo]之外。请建议其他任何可以在不修改第三方类的情况下工作的其他内容

+2

你应该能够在内部使用反射。告诉我们你已经尝试了什么。 – LukeH

+0

你是什么意思“没有用”。这就像去看医生,只是说“我不舒服”! – logicnp

回答

2

您不应该单元测试第三方提供的代码。如果你的代码依赖于外部代码,那么嘲笑该代码的行为。例如,外部库可能需要在实现特殊接口的附加类中进行封装。例如在构造函数中将该接口注入到代码中。在单元测试中,你会注入嘲讽的实现。

4
var innerType = Assembly.GetExecutingAssembly().GetTypes() 
       .Where(t => t.DeclaringType == typeof(Outer)) 
       .First(t => t.Name == "Inner"); 

var innerObject = Activator.CreateInstance(innerType); 
innerType.GetMethod("InnerTest", BindingFlags.Instance | BindingFlags.NonPublic) 
     .Invoke(innerObject, new object[] { }); 

-

public class Outer 
{ 
    class Inner 
    { 
     internal void InnerTest() 
     { 
      Console.WriteLine("test"); 
     } 
    } 
} 
+0

嗨,首先感谢大家的回应。答案1:我想提到它不是“第三方代码”,它基本上是我们自己的代码,但我们不想对其进行任何修改,这就是我将其作为第三方提及的原因。答案2:它不是我的构造函数是内部的,我的类本身就是内部的,即在类声明本身它的内部标记。 – Divya

+0

对不起,我只是观察到,InnerTest不是一个构造函数,会测试这个并得到返回 – Divya

+0

是的,这对我工作很感谢:) – Divya