public async Task Adding_new_message_to_chat_test() { var chatViewModelTestRepository = new Mock <IMessageRepository>(); var chat = _fixture.Create <Chat>(); var navigateRequest = _fixture.Create <NavigateRequest>(); Message message = null; // here the callback is taking the same parameter from CreateMessage chatViewModelTestRepository.Setup(s => s.CreateMessage(It.IsAny <Message>())) .Callback <Message>(c => message = c) .Returns(() => { return(Task.Run(() => { })); }); var sut = new ChatViewModel( new Mock <INavigateRequestRepository>().Object, null, chatViewModelTestRepository.Object, null); await sut.PrepareAsync(new ChatParameters { Chat = chat, NavigateRequest = navigateRequest }); var messageText = "Test"; sut.ActiveMessage = messageText; await sut.CreateNewMessage(); chatViewModelTestRepository.Verify(v => v.CreateMessage(It.Is <Message>(i => i == message))); Assert.AreEqual(chat.FirebaseKey, message.ChatFirebaseKey); Assert.AreEqual(chat.ActiveUser.EmailAddress, message.SenderEmail); Assert.AreEqual(messageText, message.Text); // TODO: verify that the timestamp is in correct date format, for now just make sure it is a string Assert.IsInstanceOfType(message.TimeStamp, typeof(String)); }