1

プライベート メソッドをモックする方法を示す簡単なテストをセットアップしようとしていますが、実行すると次の例外が発生します。

タイプ 'System.ArgumentException' の例外が mscorlib.dll で発生しましたが、ユーザー コードで処理されませんでした

追加情報: 配列が空でない可能性があります。

GetUsers()次のクラスでモックしたい:

public sealed class UserRepository 
{
    private IList<Models.User> GetUsers()
    {
        throw new NotImplementedException();
    }
}

これが私の単体テストです:

[TestMethod]
public void TestMethod()
{
    //Arrange
    UserRepository userRepo = Mock.Create<UserRepository>(Behavior.CallOriginal);
    IList<User> expected = new User[5];

    Mock.NonPublic.Arrange<IList<User>>(userRepo, "GetUsers").Returns(expected);

    //Act
    var inst = PrivateAccessor.ForType(typeof(UserRepository));
    var users = (IList<User>)inst.CallMethod("GetUsers");  //Error occurs here

    //Assert
    Assert.AreEqual(5, users.Count);
}

このエラーが発生する理由はありますか?

4

1 に答える 1

3

GetUsers()はインスタンス メソッドですが、PrivateAccessor.ForType()静的メンバーへのアクセスにのみ使用されます。ここを作成する最良の方法PrivateAccessor

var inst = Mock.NonPublic.MakePrivateAccessor(userRepo);

エラーメッセージがばかげていることに完全に同意します。

于 2014-06-17T05:58:13.783 に答える