6

TargetContainerDto2 つの内部プロパティを持つpublic class( ) があります。列挙型と、その列挙型の値を含む型。

型を単体テストしようとしていますが、問題があります。

internal enum TargetContainerType
{
    Endpoint,
    Group,
    User,
    UserGroup
}


internal TargetContainerType Type { get; set; }

これは私のテストクラスのリフレクションコードです

public void setType(TargetContainerDto t, int val)
{
    BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Instance;
    PropertyInfo pi = t.GetType().GetProperty("Type", bf);
    pi.SetValue(t, val, null);
}

public TargetContainerDto setTypeTo(TargetContainerDto t, int val)
{
    setType(t, val);
    return t;
}

TargetContainerDtoType よりも多くのプロパティがありますが、公開されているため、テストしても問題ありません。は、型に応じてiconURL定義された文字列です。TargetContainerDtoここに私のテスト方法があります:

public void DefaultSubGroupIcon()
{
    var o1 = new TargetContainerDto
    {
        Id = 1234,
        DistinguishedName = "1.1.1.1",
        SubGroup = "test",
    };
    setType(o1, 3);
    Assert.AreEqual(o1.IconUrl, "/App_Themes/Common/AppControl/Images/workstation1.png");
}

typevalue を設定する必要があるときに、テスト メソッドで setTypeTo を呼び出しますが、MethodAccessException. 列挙型にアクセスできないためだと思います。リフレクションを介して列挙型にアクセスするにはどうすればよいですか?

ありがとう

4

3 に答える 3

11

アセンブリを属性でマークするとInternalsVisibleTo、テスト dll でリフレクションを使用する必要がなくなります。

たとえば、アプリケーション dll の AssemblyInfo.cs ファイルに次の行を追加します。

[assembly:InternalsVisibleTo("TestAssembly")]

詳しくはこちらをご覧ください。

于 2013-04-05T09:43:53.967 に答える
6

あなたは間違った質問をしています。より良い質問は次のとおりです。

クラスの内部状態のテストを停止するにはどうすればよいですか?

ただし、これがどうしても必要な場合は、この関連するSO 回答で説明されている方法がいくつかあります

于 2013-04-05T09:45:36.873 に答える