2016-10-14 14 views
0

私はクラスPositionを持っており、メソッドCreatePositionをテストしたいと思います。動的に返す引数を持つモックオブジェクト設定メソッド

private void AddToAllowedPositions(IPosition positionCreator) 
    { 
      int horizontalIndex = piece.Position.IndexHorizontal; 
      int verticalIndex = piece.Position.IndexVertical; 

      while(IndexesAreValid(horizontalIndex, verticalIndex) 
     { 
       IPosition currentPosition = positionCreator.CreatePosition(horizontalIndex, verticalIndex); 
       allowedPosition.Add(currentPosition); 
     } 
    } 

私の問題: - :

public Position CreatePosition(int horizontalIndex, int verticalIndex) 
{ 
    return new Position(horizontalIndex, verticalIndex); 
} 

インタフェースIPosition:パラメータの各ペアのためには、新しいポジションを作成

public interface IPosition 
{ 
    char HorizontalPosition { get; } 
    int VerticalPosition { get; } 
    int IndexHorizontal { get; } 
    int IndexVertical { get; } 
    Position CreatePosition(int horizontalIndex, int verticalIndex); 
} 

方法CreatePositionが、ここで使用され、それがダイナミックだされているメソッドは次のようになりますメソッドCreatePositionを偽装する方法がわからないということです。

私はこのようなMock<IPosition>を作成しました:

Mock<IPosition> positionCreator = new Mock<IPosition>(); 
positionCreator.Setup(positionCreator.Object.CreatePosition(?, ?)).Returns(??); 

それは本当のポジションをやっているだけのように、動的パラメータを受け入れ、ダイナミックな結果を返しますので、私は偽物その方法をしたいと思います。これは可能ですか?

おそらく

答えて

2

あなたの試験方法では、このような何か:

positionCreator 
    .Setup(x => x.CreatePosition(It.IsAny<int>, It.IsAny<int>)) 
    .Returns(new Position(givenHorizontalIndex, givenVerticalIndex)); 

、あなたは別の入力と期待される出力を持つさまざまなテストケースを持つことができます。

または入力を指定した場合のように、[SetUp]メソッドですべての情報を配線する場所を指定します。

+0

お返事ありがとうございます。新しいポジションの代わりにモックオブジェクトを返す方法はありますか?モックのようなもの? – FrenkyB

+0

いいえ、返すメソッドは、実際のメソッド( 'CreatePosition')がテスト中に呼び出されたときに返すものを記述します。メソッドの戻り値の型と同じ型のパラメータを受け取る必要があります。 –

+0

これは問題です。 IsAny はintを返す汎用的なメソッドであり、整数ではありません。 – FrenkyB

関連する問題