public void Customer_CRUD_operations_basics()
        {
            var customer = new Customer() { Name = "Foo Bar", Address = "Los Angeles, CA" };

            var customers = new List<Customer>();
            var mockSet = EntityFrameworkMoqHelper.CreateMockForDbSet<Customer>()
                                                            .SetupForQueryOn(customers)
                                                            .WithAdd(customers, "CustomerID")//overwritten to simulate behavior of auto-increment database
                                                            .WithFind(customers, "CustomerID")
                                                            .WithRemove(customers);

            var mockContext = EntityFrameworkMoqHelper.CreateMockForDbContext<DemoContext, Customer>(mockSet);

            var customerService = new CustomerService(mockContext.Object);

            customerService.Insert(customer);

            customers.Should().Contain(x => x.CustomerID == customer.CustomerID);

            //Testing GetByID (and DbSet.Find) method
            customerService.GetByID(customer.CustomerID).Should().NotBeNull();

            //Testing Remove method
            customerService.Remove(customer);

            customerService.GetByID(customer.CustomerID).Should().BeNull();
        }
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Starting example...");

                var customer = new Customer() { Name = "Lorem Ipsum", Address = "Los Angeles, CA" };

                var customerService = new CustomerService();

                customerService.Insert(customer);

                Console.WriteLine("Inserting Customer...Done.");

                var customerFromDataBase = customerService.GetByID(customer.CustomerID);

                customerService.Remove(customer);

                Console.WriteLine("Some basic CRUD operations done. Give a look at 'DemoClientUnitTest' project to understand how EntityFramework.MoqHelper works");
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                Console.WriteLine("Stack: " + exc.StackTrace);

                Console.WriteLine("");
                Console.WriteLine("CURRENT DATA SOURCE (hard coded on DemoContext class): " + @"Data Source=.\SQLEXPRESS;Initial Catalog=DemoForMoqHelper;Integrated Security=true;");
            }

            Console.ReadKey();
        }
        public void Customer_insert_checking_property_customerID()
        {
            var customer = new Customer() { Name = "Foo Bar", Address = "Los Angeles, CA" };

            var customers = new List<Customer>();
            var mockSet = EntityFrameworkMoqHelper.CreateMockForDbSet<Customer>()
                                                            .SetupForQueryOn(customers)
                                                            .WithAdd(customers, "CustomerID");//overwritten to simulate behavior of auto-increment database

            var mockContext = EntityFrameworkMoqHelper.CreateMockForDbContext<DemoContext, Customer>(mockSet);

            var customerService = new CustomerService(mockContext.Object);

            customerService.Insert(customer);

            //Instead of checking implementations details, it was checking bussines rules
            Assert.IsTrue(customer.CustomerID > 0);
        }
        public void Customer_insert_checking_EF_implementation_details()
        {
            var customer = new Customer() { Name = "Foo Bar", Address = "Los Angeles, CA" };

            var customers = new List<Customer>();
            var mockSet = EntityFrameworkMoqHelper.CreateMockForDbSet<Customer>()
                                                            .SetupForQueryOn(customers)
                                                            .WithAdd(customers);

            var mockContext = EntityFrameworkMoqHelper.CreateMockForDbContext<DemoContext, Customer>(mockSet);

            var customerService = new CustomerService(mockContext.Object);

            customerService.Insert(customer);

            //Checking how many times 'DbSet.Add' and 'DbContext.SaveChanges' was called
            mockSet.Verify(m => m.Add(It.IsAny<Customer>()), Times.Once);
            mockContext.Verify(m => m.SaveChanges(), Times.Once);
        }