2016-10-14 79 views
0

我有一個類位置,我想測試方法CreatePosition。方法是這樣的:動態返回參數的模擬對象設置方法

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用在這裏,它是動態的 - 每對參數也創造了新的位置:

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); 
     } 
    } 

我的問題是我不知道如何僞造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

感謝您的回答。有沒有辦法返回Mock對象而不是新的Position?像模擬? – FrenkyB

+0

否,Returns方法描述了在測試期間調用實際方法('CreatePosition')時將返回什麼,所以它必須接收與方法的返回類型相同類型的參數 –

+0

還有一個問題,因爲它。 IsAny 是返回int的泛型方法,它不是一個整數。 – FrenkyB

相關問題