public void TestWithSomePeersToSend() { PeerExchangeMessage sentMessage = new PeerExchangeMessage(); var messageHandler = new PeerExchangeMessageHandler(Mock.Of <ILogger <PeerExchangeMessageHandler> >(), Mock.Of <ITcpTransportProtocol>()); var context = new Mock <IExtensionProtocolMessageReceivedContext>(); context.Setup(x => x.Message).Returns(MockMessage()); context.Setup(x => x.Peers).Returns(MockPeers()); context.Setup(x => x.SendMessage(It.IsAny <IExtensionProtocolMessage>())).Callback <IExtensionProtocolMessage>(message => sentMessage = (PeerExchangeMessage)message); var metadata = new PeerExchangeMetadata { ConnectedPeersSnapshot = new List <string> { "192.168.1.20:8080", "192.168.1.21:8080", "192.168.1.25:8080", }, }; context.Setup(x => x.GetValue <PeerExchangeMetadata>(PeerExchangeMetadata.Key)).Returns(metadata); messageHandler.MessageReceived(context.Object); context.Verify(x => x.Message, Times.Once); context.Verify(x => x.PeersAvailable(It.IsAny <IEnumerable <ITransportStream> >()), Times.Once); context.Verify(x => x.GetValue <PeerExchangeMetadata>(PeerExchangeMetadata.Key), Times.Once); context.Verify(x => x.Peers, Times.Once); context.Verify(x => x.SendMessage(It.IsAny <PeerExchangeMessage>()), Times.Once); context.Verify(x => x.SetValue(PeerExchangeMetadata.Key, It.IsAny <PeerExchangeMetadata>()), Times.Once); context.VerifyNoOtherCalls(); var expectedSentMessage = new PeerExchangeMessage { Added = new List <IPEndPoint> { new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 22 }), 8080), new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 23 }), 8080), }, Dropped = new List <IPEndPoint> { new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 25 }), 8080), }, }; sentMessage.Should().BeEquivalentTo(expectedSentMessage); }