4

だから私はと呼ばれるクラスを持っていUserます。internalコンストラクタがあります。ただし、オブジェクトを作成したいので、次のUserようにモックできます。

public ISessionManagerInstance MockedSessionManager()
{
    var manager = new Mock<ISessionManagerInstance>();
    var company = new Chatham.Web.Business.Classes.Company(500, "", "", Enumerations.WebRelationshipInfo.NotSet, "", 0, 0, Data.Login.TeamOwnership.NotSet, 0, 0, false, null, false);
    manager.Setup(p => p.Company).Returns(company);

    Chatham.Web.Business.Classes.User displayUser = typeof(Chatham.Web.Business.Classes.User);
    displayUser.EntityID = 1786;
    manager.Setup(p => p.DisplayUser).Returns(displayUser);

    return manager.Object;
}

今、Companyコンストラクターがあるので、それは簡単です。しかし、User内部のみのものがあります。を作成してUser1 つのプロパティを設定するだけintで、そのオブジェクトをモックに戻す方法はありますか?

4

3 に答える 3

6

1 つのオプションは、単体テスト プロジェクトをメイン プロジェクトの "内部" として追加することです。これにより、単体テスト コードが "内部" とマークされたものにアクセスできるようになります。AssemblyInfo.cs ファイルに実装するのは簡単です。

// main project AssemblyInfo.cs file 
[assembly: InternalsVisibleTo("YourProject.Tests")]
于 2011-04-25T20:23:55.040 に答える
6

次の 2 つの可能性が考えられます。

インターフェイスを作成し、IUserユーザーにそれを実装させ、それに対してモックを作成します。これは、.NET テストの世界では非常に一般的な方法です。Users を使用するすべてのメソッドは、ほとんどの場合、IUser参照を受け入れる必要があります。

別の可能性 (お勧めしませんが、あります) は、InternalsVisibleToアセンブリ属性を使用することです。その後、本番アセンブリの内部をテスト アセンブリから見ることができます。

于 2011-04-25T20:24:20.037 に答える
2

AssemblyInfo.cs でInternalsVisibleToプロパティを使用して、内部メンバーを UnitTest アセンブリに表示することができます。

于 2011-04-25T20:22:51.097 に答える