目前我想进行UT覆盖,需要100%的功能覆盖。 我在我的应用程序中有一个名为FunctionParser.cs的公共类,它在内部使用第三方提供的名为Autocomplete的内部类。现在的问题是,AutoComplete类中的功能很少,未经测试。因此,为了对名为“AutoComplete”的内部类进行覆盖,我尝试使用反射,但没有任何对我有用的可以有人说我如何使用反射来访问此内部类以进行测试。
注意:我无法修改AutoComplete.CS,这是第三方提供的内部类,所以除了使用以下内容之外•Get [InternalsVisibleTo]。请在不修改第三方类别的情况下提出其他可行的建议
答案 0 :(得分: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");
}
}
}
答案 1 :(得分:2)
您不应该单独提供第三方提供的测试代码。如果您的代码依赖于外部代码,则模拟该代码的行为。例如,外部库可能需要在实现特殊接口的附加类中进行封装。然后将该接口注入到代码中,例如在构造函数中。在单元测试中,您将注入模拟实现。