public async Task WhenPlayer_ThatIsInGameSession_IsRemoved_SessionClosedMessageIsSentToOtherPlayer() { msgSenderMock.Setup(m => m.SendMessageAsync(It.IsAny <IWebSocket>(), It.IsAny <SessionClosedMessage>())).Returns(() => Task.Delay(0)); var player1Mock = new Mock <IPlayer>(MockBehavior.Strict); var player2Mock = new Mock <IPlayer>(MockBehavior.Strict); var player1SocketMock = new Mock <IWebSocket>(); var player2SocketMock = new Mock <IWebSocket>(); var gameSessionMock = new Mock <IGameSession>(MockBehavior.Strict); var player1Guid = Guid.NewGuid(); var player2Guid = Guid.NewGuid(); var sessionGuid = Guid.NewGuid(); player1Mock.SetupGet(p => p.GUID).Returns(player1Guid); player1Mock.SetupGet(p => p.GameSessionGUID).Returns(sessionGuid); player1Mock.SetupGet(p => p.Socket).Returns(player1SocketMock.Object); player2Mock.SetupGet(p => p.GUID).Returns(player2Guid); player2Mock.SetupGet(p => p.GameSessionGUID).Returns(sessionGuid); player2Mock.SetupGet(p => p.Socket).Returns(player2SocketMock.Object); gameSessionMock.SetupGet(s => s.GUID).Returns(sessionGuid); gameSessionMock.SetupGet(s => s.PlayerOne).Returns(player1Mock.Object); gameSessionMock.SetupGet(s => s.PlayerTwo).Returns(player2Mock.Object); gameSessionMock.Setup(s => s.Close()); var collections = new Collections(loggerMock.Object, msgSenderMock.Object); collections.AddPlayer(player1Mock.Object); collections.AddPlayer(player2Mock.Object); collections.AddSession(gameSessionMock.Object); await collections.RemovePlayer(player1Mock.Object); msgSenderMock.Verify(m => m.SendMessageAsync(player2SocketMock.Object, It.IsAny <SessionClosedMessage>())); gameSessionMock.Verify(s => s.Close()); }