サイのモックで何らかの形でNEWを期待することは可能ですか?
例:
public void ToBeTested()
{
ClassForExmaple classForExample = new ClassForExample();
//Other logic.....
}
したがって、単体テストでToBeTested()を呼び出したいのですが、新しいClassForExampleが呼び出されたときに、モックバージョンを返すようにします。
サイのモックで何らかの形でNEWを期待することは可能ですか?
例:
public void ToBeTested()
{
ClassForExmaple classForExample = new ClassForExample();
//Other logic.....
}
したがって、単体テストでToBeTested()を呼び出したいのですが、新しいClassForExampleが呼び出されたときに、モックバージョンを返すようにします。
私は Rhino モックを使用したことがなく、これが RhinoMock でサポートされているものかどうかはわかりませんが、オブジェクトの作成の制御がメソッド内に埋め込まれているという事実は、DI/IOC の原則に違反しているため、テストが困難です。 .. 理想的には、クラスは、含まれているクラスのコンストラクターを介して、またはメソッド自体にメソッドに注入されている必要があります..
したがって
class A
{
IClassForExample _classForExample;
public A(IClassForExample classForExample)
{
_classForExample=classForExample;
}
public void ToBeTested()
{
var classForExample = _classForExample;
//Other logic.....
}
}
非抽象/インターフェースクラスを拡張するRhinoSupportはありますか - 質問はわかりませんが、インターフェースをモックできると確信しています。
いいえ、それは不可能です。期待できないのと同じ理由static
で、インスタンスで呼び出されません。
テストしたコード内に構築されたオブジェクトにモックを使用したい場合は、次のようにする必要があります。
internal virtual ClassForExample NewClassForExempe()
{
return new ClassForExample();
}
次に、テストでこのメソッドをモックします。
注 : クラスのInternalsVisibleToAttributeでrhino モックが宣言されていると仮定して、メソッド internal を配置します。それ以外の場合は、公開する必要があります。