public async void AddNewBooktoLibraryRoute_Test() { // Arrange var genre1 = CreateGenre(); var newBook = CreateBook(new List <Genre>() { genre1 }); var person = CreatePerson(); var library = new List <Book>(); var bookGenres = new List <Genre>(); _bookRepository .Setup(x => x.Relate <Person, InLibrary>(It.IsAny <Expression <Func <Book, bool> > >(), It.IsAny <Expression <Func <Person, bool> > >(), It.IsAny <InLibrary>())) .ReturnsAsync(true) .Callback <Expression <Func <Book, bool> >, Expression <Func <Person, bool> >, InLibrary>( (exp1, exp2, inLibrary) => { library.Add(newBook); } ); _genreRepository .Setup(x => x.GetRelated <Book, InGenre>(It.IsAny <Expression <Func <Genre, bool> > >(), It.IsAny <Expression <Func <Book, bool> > >(), It.IsAny <InGenre>())) .ReturnsAsync(new List <Book>()); _genreRepository .Setup(x => x.Relate <Book, InGenre>(It.IsAny <Expression <Func <Genre, bool> > >(), It.IsAny <Expression <Func <Book, bool> > >(), It.IsAny <InGenre>())) .ReturnsAsync(true) .Callback <Expression <Func <Genre, bool> >, Expression <Func <Book, bool> >, InGenre>( (exp1, exp2, inLibrary) => { bookGenres.Add(genre1); } ); SetupMockBookRepo(CreateBook()); var bookController = new BookController(_bookRepository.Object, _genreRepository.Object, _mapper); // Act var result = await bookController.AddBookToLibrary(person.Name, newBook); var okResult = result as OkResult; // Assert Assert.True(okResult != null); Assert.Equal(200, okResult.StatusCode); // Verify Correct functions were called / correct callbacks were performed Assert.True(library.Count == 1); Assert.True(library.Where(b => b.Title == newBook.Title).ToList().Count == 1); Assert.True(bookGenres.Count == 1); Assert.True(bookGenres.Where(b => b.Description == genre1.Description).ToList().Count == 1); }