public async Task CategoriesNotInproduct_Called_ReturnsExpectedCategoriesWhichAreNotForProduct() { // Arrange //Setup their relationship Product fakeProduct1 = new Product() { ProductID = 1, Categories = new List <Category>() { } }; Category category1 = new Category() { CategoryID = 1, Name = "cat1", Products = new List <Product>() { fakeProduct1 } }; Category category2 = new Category() { CategoryID = 2, Name = "cat2", Products = new List <Product>() { fakeProduct1 } }; Category category3 = new Category() { CategoryID = 3, Name = "cat3", Products = new List <Product>() { } }; fakeProduct1 = new Product() { ProductID = 1, Categories = new List <Category>() { category1, category2 } }; List <Category> fakeCategoryList = new List <Category>() { category1, category2, category3 }; _productRepository.Setup(p => p.GetByIDAsync(1)).ReturnsAsync(fakeProduct1); _categoryRepository.Setup(p => p.GetAllAsync()).ReturnsAsync(fakeCategoryList); ProductController controller = new ProductController(_productRepository.Object, _categoryRepository.Object, _orderRepository.Object); // Act JsonResult result = await controller.CategoriesNotInProduct(1) as JsonResult; List <ProductCategoryViewModel> resultPCVM = result.Data as List <ProductCategoryViewModel>; //Assert Assert.IsTrue(resultPCVM.Count == 1); Assert.IsTrue(resultPCVM[0].CategoryName == "cat3"); }