2016-12-20 4 views
0

ユニットテストメソッドを記述しているメソッドでサービスコールをMOQしたい。例えば抽象クラスのオブジェクトを返すメソッドでサービスコールをmoqする方法はありますか?

public void MethodUnderTest(data) 
{ 
    XYZService.ServiceMethod(data); 
} 

上記サービス方法は、抽象クラスのオブジェクトを返す(A級と言うことができます)。すなわち

public ClassA ServiceMethod(ClassA data) 
    { 
     //code 
    } 


public abstract class ClassA 
    { 
     //Code 
    } 

、私のように私のテストクラスで上記のテストのためのMOQ書く場合:私はの代わりに新にClassA()を書く場合

_xyzService.setup(x => x.ServiceMethod(data)).Returns(?);

、私はクラスが抽象であるので、それをするはずがありません!

だから、私はリターンに何を置くべき?

+2

「ClassA」から派生したものを返すと正しいアプローチになります。ダミーの 'public class ClassAB:ClassA'を作成してください。 – Fabio

+1

@Fabioモッキングフレームワークの目的は、それらのすべての派生物を自分で作成するのではなく、フレームワークを使ってそれらのタイプのインスタンスを作成することです。 – HimBromBeere

+0

@HimBromBeere、私のコメントのポイントは、OPがClassAから派生したクラスだけを返すということでした。テストの観点からは、このインスタンスを作成する方法はありません。申し訳ありませんが、私はフレームワークを嘲笑することの重要性を弁別しようとしませんでした。 – Fabio

答えて

1

You'reはモックインスタンスを作成しない。

var mock = new Mock<ClassA>(); 
_xyzService.Setup(x => x.ServiceMethod(data)).Returns(mock.Object); 

new MockだけClassAから派生クラスを作成し、そのクラスのインスタンスを返します。

+0

構文エラーが発生しました: – Vishwas

+0

@Vishwas Eeeehmあなたは精巧にできますか?どこ? – HimBromBeere

+1

@Vishwas - それは私がにClassAからクラス(ClassBの)を導出する際の作業と方法を返すように渡すが、私は、コードの上に実装されたときに、私は(モック)戻り値の構文エラーを取得している 'コピーpaste' :) – Fabio

関連する問題