public void ANewGame_StartsByFirstPlayer() { var mockPlayerA = new Mock<IDartsPlayer>(); var mockPlayerB = new Mock<IDartsPlayer>(); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); Assert.Equal(mockPlayerA.Object, game.NextTurnPlayer); }
public void ANewGame_InitializesEveryPlayer() { var mockPlayerA = new Mock<IDartsPlayer>(); var mockPlayerB = new Mock<IDartsPlayer>(); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); mockPlayerA.Verify(p => p.Initialize(It.Is<int>(a => a == 301)), Times.Once); mockPlayerB.Verify(p => p.Initialize(It.Is<int>(a => a == 301)), Times.Once); }
public void IsNotFinished_WhenPlayersHavePointsRemaining() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(301); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); Assert.False(game.Finished); }
public void IsFinished_WhenAPlayerHasNoRemainingPoints() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(0); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); Assert.True(game.Finished); }
public void PlayNextTurn_CyclesEveryPlayerInOrder() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); game.PlayNextTurn(); mockPlayerA.Verify(p => p.PlayTurn(), Times.Once, "First player should play first"); game.PlayNextTurn(); mockPlayerB.Verify(p => p.PlayTurn(), Times.Once, "Second player should play next"); Assert.Equal(mockPlayerA.Object, game.NextTurnPlayer); }
public void ADarts301GameCanBePlayed() { var playerAMockThrower = new Mock<IDartsThrower>(); playerAMockThrower.SetupSequence(dt => dt.ThrowDart()).Returns(60).Returns(60).Returns(60).Returns(60).Returns(60).Returns(1); var playerBMockThrower = new Mock<IDartsThrower>(); playerBMockThrower.Setup(dt => dt.ThrowDart()).Returns(20); var game = new Darts301Game( new DartsPlayer(playerAMockThrower.Object), new DartsPlayer(playerBMockThrower.Object)); var gameDriver = new GameDriver(game); gameDriver.Play(); Assert.True(game.Finished); Assert.Equal(game.Winner, game.Players.First()); }
public void PlayNextTurn_IncreasesTheTurnIndex() { var mockPlayer = new Mock<IDartsPlayer>(); mockPlayer.SetupGet(p => p.RemainingPoints).Returns(5); var game = new Darts301Game(mockPlayer.Object); game.PlayNextTurn(); Assert.Equal(2, game.TurnNumber); }
public void ANewGame_StartsOnTurnOne() { var game = new Darts301Game(new Mock<IDartsPlayer>().Object); Assert.Equal(1, game.TurnNumber); }
public void Winner_WhenGameIsNotFinished_ThrowsException() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(301); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); Assert.Throws<InvalidOperationException>(() => game.Winner); }
public void Winner_WhenGameIsFinished_ReturnsPlayerWithZeroRemainingPoints() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(0); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); Assert.Equal(mockPlayerB.Object, game.Winner); }
public void PlayNextTurn_WillGetBackToFirstPlayer_AfterAllPlayersPlayed() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); game.PlayNextTurn(); mockPlayerA.Verify(p => p.PlayTurn(), Times.Once, "First player should play first"); game.PlayNextTurn(); mockPlayerB.Verify(p => p.PlayTurn(), Times.Once, "Second player should play next"); game.PlayNextTurn(); mockPlayerA.Verify(p => p.PlayTurn(), Times.Exactly(2), "First player should play again"); }
public void PlayNextTurn_WhenGameIsFinished_ThrowsException() { var mockPlayer = new Mock<IDartsPlayer>(); mockPlayer.SetupGet(p => p.RemainingPoints).Returns(0); var game = new Darts301Game(mockPlayer.Object); Assert.Throws<InvalidOperationException>(() => game.PlayNextTurn()); }
public void PlayNextTurn_StartsByFirstPlayerAndMovesToSecond() { var mockPlayerA = new Mock<IDartsPlayer>(); mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100); var mockPlayerB = new Mock<IDartsPlayer>(); mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100); var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object); game.PlayNextTurn(); var nextPlayer = game.NextTurnPlayer; Assert.Equal(mockPlayerB.Object, nextPlayer); mockPlayerA.Verify(p => p.PlayTurn(), Times.Once); }