2017-09-01 6 views
3

Moqを使用して、特定のインターフェイスのテストを作成しようとしています。インターフェイスを実装するオブジェクトの値は、この質問で「コントローラ」と呼ばれるクラスによって設定されます。Moqで取得できない虚偽のインターフェイスから値を取得するにはどうすればよいですか?

インタフェース:

public interface ITestInterface 
{ 
    int number {set;} 
} 

そして、私のモック:

Mock<ITestInterface> myTestMock = new Mock<ITestInterface>(); 

テストを行うには、私は、コントローラが嘲笑クラスの数を設定することを期待、しかし、私はを取得する必要がありますそれをテストする値。このような何か:もちろん

Controller c = new Controller(myTestMock.Object); 
c.Initialize(); //initialization will set number to something 
Assert.AreEqual(myTestMock.number, 3); 

私はその値を読み取ることができないので、私は、インターフェイスが「取得」メソッドを持っていないことを考えると、エラーが発生します。

インタフェースを変更せずに私のモックを取得するにはどうすればよいですか?

+1

代わりに、独自のモックオブジェクトを作成し、多分あなたは' myTestMock.VerifySetを使用することができます(X => x.number = 3); ' –

+0

@ThariqNugrohotomoそれを"アクセサーが足りない"という同じエラーが表示されます。 – Th0rndike

+2

@ Th0rndike - 'Assert'行を削除します。 @Thariqは正しい 'myTestMock.VerifySet(x => x.number = 3);'が動作します。 (ちょうどそれをテストしました、それは私にとっても新しいものでした)。 - 'c.Initialize();'と仮定すると、実際には数値が設定されます。私は 'myTestMock.VerifySet(x => x.number = 4);を試してみましたが、4ではなく3に設定されていることを認識したのでテストに失敗しました。 – Corak

答えて

0

は、私たちが自分の「偽」の実装を記述する必要はありませんので、すべてのモックフレームワークは、私たちの生活を楽にするために設計されたテスト

var testMock = new FakeTestInterface(); 
var controller = new Controller(testMock); 
controller.Initialize(); 
Assert.AreEqual(testMock.NumberValue, 3); 

に続いて独自の実装

public class FakeTestInterface : ITestInterface 
{ 
    public int NumberValue { get; private set; } 
    public int number 
    { 
     set 
     { 
      NumberValue = value; 
     } 
    } 
} 

を使用します。
あなたはフレームワークをあざけるとの問題に直面している - Assert.AreEqual` `の

関連する問題