0

だからこれは惨めになっています。Microsoft のガベージ メンバーシップ ライブラリのいくつかをテストしようとしていますが、それらはひどいものです。私はMembershipクラスの前にインターフェースを置くことができ、その後ProfileBaseを実装するクラスで問題に遭遇し、そのためのインターフェースを作成することができたので、愚かな静的作成メソッドをモックすることができましたが、どうすればprofileBaseのプロパティをモックすることができますか?これが、その愚かなクラスを使用する唯一の理由です。真剣に、この時代の MicroSoft はコードを修正できないため、おかしな単体テストを作成できます。可哀想。これは私がこれまでに試したことです

mockProfileFactoryService = new Mock<IProfileFactoryService>();
mockProfileFactoryService.Setup(x => x.GetUserProfile(It.IsAny<string>())).Returns(new DummyUserProfile(){FirstName = ""});   

これは、ダミークラスがどのように見えるかです

public class DummyUserProfile: UserProfile
{
    public new String FirstName { get; set; }
    public new String LastName { get; set; }
}

プロパティ FirstName と LastName をそのように非表示にできると思ったのですが、テストが失敗して、実際の UserProfile クラスのプロパティにアクセスしようとしていることがわかります。

誰も私がこれを行う方法を知っていますか? 真剣に - ProfilBase クラスから継承するとき、他の人は何をしていますか?

私もリシェイパーを使用して抽出とインターフェースを試みましたが、それはうまくいくように見えましたが、それを嘲笑してから .Return(profileMock.object) と言おうとすると、変換できず、IUserProfile を UserProfile に変換できないと言って爆発しましたか? 私はARGの前にそれを見たことがありません!!!

つまり、コードを変更してテスト可能にするのは嫌いです。つまり、nullや愚かながらくたをチェックしますが、できればそうしますが、この場合、これについて何をするので何もできませんか?

base["FirstName"] 
4

1 に答える 1

0

だから、良い暴言の後、私は私の IProfileFacotryService でこれを思いついた

string GetPropertyValue(string userName, string propertyName);

その後、実装で

public string GetPropertyValue(string userName, string propertyName)
{
    return (string)GetUserProfile(userName).GetPropertyValue(propertyName);
}

しかし、私はそれに興奮していません-私は通常、元のコードを呼び出す以外のことを行うインターフェイスを作成するのが嫌いであり、それが実際にそれを行っているとは感じません-つまり、そうですが、意味は私にはあまり明確ではないようです? とにかく、これを行うためのより良い方法があると感じているので、これが機能している間は、より良い解決策があれば気にしません。

明らかに、これをモックできるようになりましたが、私のコードでは言わなければなりません

taskBoardModel.Name = profileFactoryService.GetPropertyValue(userName, "FirstName");

むしろ言いたい

 taskBoardModel.Name = profileFactoryService.GetUserProfile(userName).FirstName;

とにかく - ハンバグ!

于 2012-07-17T02:08:58.017 に答える