[英]Method in Mocked object is not called from sut
我為我的紙牌游戲制作 MSTests。 我有 Player class (它取決於IStrategy
接口),它有一個調用interface.Attack()
方法的方法Attack()
。 創建Mock<IStrategy>
並設置strategy.Attack()
。 但是當Player.Attack
被調用時, mock.Attack
不會被調用。
我做錯了什么?
public class Player : IPlayer
{
public List<Card> CardsOnHands { get; }
public IStrategy Strategy { get; }
public Player(IStrategy strategy)
{
Strategy = strategy;
CardsOnHands = new List<Card>();
}
public Card Attack(List<Card> CardsOnTable)
{
return Strategy.Attack(CardsOnHands, CardsOnTable);
}
}
我的測試如下
[TestMethod]
public void PlayerAttackShouldReturnCard()
{
//Arrange
var StrategyMock = new Mock<IStrategy>();
ExpectedCard = new Card(1, "fakeName", "fakeSuit", true);
CardList = new List<Card>
{
new Card(1, "", "", true),
new Card(1, "", "", true),
new Card(1, "", "", true)
};
StrategyMock
.Setup(x => x.Attack(CardList, CardList))
.Returns(ExpectedCard);
var _player = new Player (StrategyMock.Object);
//Act
Card actualCard = _player.Attack(CardList);
//Assert
StrategyMock.Verify(x => x.Attack(CardList, CardList), Times.Exactly(1));
Assert.AreEqual(ExpectedCard, actualCard);
}
Verify
失敗
您必須將模擬接口顯式注入主題 class ( _player
)。
當前示例未顯示您在哪里執行此操作。
它需要看起來像
[TestMethod]
public void PlayerAttackShouldReturnCard() {
//Arrange
var strategyMock = new Mock<IStrategy>();
var expectedCard = new Card(1, "fakeName", "fakeSuit", true);
var tableCards = new List<Card> {
new Card(1, "", "", true),
new Card(1, "", "", true),
new Card(1, "", "", true)
};
strategyMock
.Setup(x => x.Attack(It.IsAny<List<Card>>(), tableCards))
.Returns(expectedCard)
.Verifiable();
Player _player = new Player(strategyMock.Object); //<--- explicit injection here
//Act
Card actualCard = _player.Attack(TableCards);
//Assert
strategyMock.Verify();
Assert.AreEqual(expectedCard, actualCard);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.