2016-04-20 11 views
0

私のクラスのメソッドの単体テストを実装しようとしています。私がテストしているクラスメソッドで、基本クラスのインデクサをどうやって模擬することができますか?以下のコードスニペットは、私の必要条件を明確に示すはずです。MVCのMockを使用したユニットテスト

public class MyClass:MyBase 
{ 
    public string returnString(string str1) 
    { 
    var xyz=base[str1]; 
    //My code to unit test is here 
    } 
} 

public class MyBase 
{ 
    public virtual string this[string str1] 
    { 
    return "prefix"+str1; 
    } 
} 

ダミー文字列でベースクラスインデクサーをスタブして、実際のコードをテストしたいと思います。どうやってやるの? これは事前にお手伝いいただきありがとうございます。

Sree。

+0

あなたが使用している模擬フレームワークとあなたのユニットテストで試したものを含めると便利かもしれません。 – JCisar

答えて

0

通常は推奨されていませんが、この場合は「適切」です。テスト中のクラスをモックします。もちろん、この場合は、基本クラスに固有のものであり、テスト対象の子孫のどのような方法でも上書きされないものだけをモックします。これにより、基本クラスの振る舞いが偽装され、子孫のメソッドをテストするときにテストの制御下に置かれます。

例では、MyClassのモックを作成しますが、継承された(MyBaseの)コンストラクタをモックアウトするだけで、他のすべてのメソッドは "コード化された"状態で実行されます。

0

テスト中のクラスをモックすることができるので、基本クラスをスタブする理由は表示されません。お見せします。

私はちょうどテストを完了するためのアサーションのためReturnStringに()メソッドにreturn文を追加しました:私はTypemock IsolatorとMSTESTを使用してい

[TestMethod, Isolated] 
public void TestIndexerFake() 
{ 
    //Arrange 
    var MyClassFake = Isolate.Fake.AllInstances<MyClass>(Members.CallOriginal); 
    Isolate.WhenCalled(() => MyClassFake["test"]).WillReturn("fake!"); 

    //Act 
    MyClass target = new MyClass(); 
    var result = target.returnString("test"); 

    //Assert 
    Assert.AreEqual("fake!", result); 
} 

public string returnString (string str1) 
{ 
    var xyz = base [str1]; 
    return xyz; 
} 

そして今テスト。

希望すると助かります!

関連する問題