0

Microsoft.Fakesを使用して、以下のコードの単体テストを作成しようとしています。私は、抽象基本クラスの保護機能メソッドの呼び出しをあざけることが困難に直面していますMicrosoft.fakesを使用して派生クラスのパブリックメソッドから基本抽象クラスの保護されたメソッドを模倣

Microsoft.Fakesに新たとして

私の基本クラス:

public abstract class MyAbstractBaseClass 
{ 
protected virtual int MyFunctionalBaseClassMethod(int parameter1) 
{ 
return (parameter1 * parameter1); 
} 
} 

私の子供クラス:

public class MyChildClass : MyAbstractBaseClass 
{ 
public int GetSquare(int parameter1) //(target method for unit test) 
{ 
return MyFunctionalBaseClassMethod(parameter1); //(target method to mock using Fakes) 
} 
} 

mockingのためのユニットテストコードを試しましたが、うまくいかなかった:

var square = 10; 
var stubMyAbstractBaseClass = new Fakes.StubMyAbstractBase() 
{ 
MyFunctionalBaseClassMethod = (a) => { return square; } 
}; 

注:私の抽象基本クラスの保護されたメソッドは複雑な操作を実行するため、私はそれをモックする必要があります。上記のコードは単なるサンプルです。

何か指摘したいと思います!

+0

を停止します。次に、Assert.IsEqual(2、x)を実行できます。 – Sasha

+0

前述のように 注:抽象基本クラス保護メソッドは複雑な操作を実行するため、私はそれをモックする必要があります。上記のコードは単なるサンプルです。 – SRS

答えて

2

抽象クラスの代わりにMyChildClassをスタブアウトする必要があります。これは私のために働いた。

[TestMethod] 
public void CheckAbstractClassStub() 
{ 
    var myChild = new StubMyChildClass() 
    { 
     MyFunctionalBaseClassMethodInt32 = (num) => { return 49; } 
    }; 

    int result = myChild.GetSquare(5); 
    Assert.AreEqual(result, 49); 
} 

編集:はい、それは保護されています。上で述べたように、派生クラスの保護されたメソッドであるMyChildClassをスタブする必要があります。あなたは抽象クラスをスタブしています。そこにインスタンスはなく、呼び出されません。あなたがすべてのインスタンスのためにそれをしたい場合、あなたはシムを使用することができるかもしれませんが、あなたはその時点でそれをもっと難しくしています。

ここで私の基本クラスとサブクラスを比較することができます。あなたはVARのx = _myChildClass.GetSquare(2)のような何かを行うことができない理由

public abstract class MyAbstractBaseClass 
{ 
    protected virtual int MyFunctionalBaseClassMethod(int parameter1) 
    { 
     return (parameter1 * parameter1); 
    } 
} 

public class MyChildClass : MyAbstractBaseClass 
{ 
    public int GetSquare(int parameter1) //(target method for unit test) 
    { 
     return MyFunctionalBaseClassMethod(parameter1); //(target method to mock using Fakes) 
    } 
} 

はここに)あなたのターゲットはGetSquare(ある場合は、コードのスクリーンショットは、デバッグポイントで

protected method returning stubbed value

+0

'MyFunctionalBaseClassMethodInt32 =(num)=> {return 49; } ' 私の場合、基本クラスのメソッドはpublicではありません。 – SRS

関連する問題