-1

現在、100% の機能カバレッジが必要な UT カバレッジを実行したいと考えていました。アプリケーションに FunctionParser.cs というパブリック クラスがあり、これはサード パーティが提供する Autocomplete という内部クラスを内部的に使用します。ここでの問題は、テストされていない AutoComplete クラス内にある機能がほとんどないことです。したがって、「AutoComplete」という名前のこの内部クラスのカバレッジを行うために、リフレクションを使用しようとしていますが、テスト目的でリフレクションを使用してこの内部クラスにアクセスする方法を教えてくれる人がいます。

注:サードパーティが提供する内部クラスである AutoComplete.CS を変更することはできないため、 •Get [InternalsVisibleTo] を使用する以外は変更できません。サードパーティのクラスを変更せずに機能するものを他に提案してください

4

2 に答える 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");
        }
    }
}
于 2012-09-07T11:18:42.910 に答える
3

サードパーティが提供するコードを単体テストすることは想定されていません。コードが外部コードに依存している場合は、そのコードの動作をモックします。外部ライブラリは、たとえば特別なインターフェイスを実装する追加のクラスでカプセル化する必要がある場合があります。そのインターフェイスをコンストラクターなどのコードに挿入するよりも。単体テストでは、模擬実装を注入します。

于 2012-09-07T10:31:28.717 に答える