public void GetPersonById()
        {
            //Bu örnekteki Unit Test yapılan fonk. ise Input("1"), Output("Deneme") olarak vermesi beklenir.
            //Bu sırada fonk.un bulunduğu classdaki Constructor input parametresi olarak EfDbCon objesi istiyor.
            //Burada fonk iç yapısına baktığımızda, Ef DbSet objelerinin kullanıldığınıda görüyoruz.
            //Ben burada DbContext i moqlarken, DbCon uda moqlamayı ve içini aşağıdaki gibi bir dumy değer ile
            //doldurmayı tercih ettim. Aslın da bu Constructor  input parametresi olarak EfDbCon objesi almasa idi
            //hiç bir şekilde EfDbCon u moq lama ile uğraşmıyacaktık :) Esasında buraki örnekler SOLID açısından da oldukça kötü olabilir ;)

            //At this Unit Test, function that we want to test,  Input("1"), Output("Deneme") as expected result.
            //But This class's constructor is need EfDbCon object as input. When I mocked DbContext, I prefer to mock DbCon  and fill this a dumy value.
            //At there,  if Constructor did not need  EfDbCon object as input, we don't have to mock Ef objects. :) If to be honest, this implementation is very ugly and unacceptable
            //according to SOLID prencibles. ;)

            var data = new Person
            {
                Id      = 1,
                Name    = "Deneme",
                Surname = "Testi"
            };
            var personList = new List <Person>
            {
                data
            }.AsQueryable();

            moqSetForPersonDbSet.As <IQueryable <Person> >().Setup(m => m.Provider).Returns(personList.Provider);
            moqSetForPersonDbSet.As <IQueryable <Person> >().Setup(m => m.Expression).Returns(personList.Expression);
            moqSetForPersonDbSet.As <IQueryable <Person> >().Setup(m => m.ElementType).Returns(personList.ElementType);
            moqSetForPersonDbSet.As <IQueryable <Person> >().Setup(m => m.GetEnumerator()).Returns(() => personList.GetEnumerator());
            mockDbConContext.Setup(c => c.Person).Returns(moqSetForPersonDbSet.Object);
            var personTask = new AppLayer.Tasks.PersonTask(mockDbConContext.Object);
            var result     = personTask.GetPersonById(1);

            Assert.AreEqual(result.Name, "Deneme");
        }
Example #2
0
        public void CreatePersonTest()
        {
            var personTask = new AppLayer.Tasks.PersonTask(dbCon);
            int result     = personTask.CreatePerson("can", "arslan");

            Assert.AreNotEqual(result, 0);
        }
Example #3
0
        public void GetPersonById()
        {
            var person           = new AppLayer.Tasks.PersonTask(dbCon);
            var personIdAsResult = person.CreatePerson("Deneme", "Testi");
            var result           = person.GetPersonById(personIdAsResult);

            Assert.AreEqual(result.Name, "Deneme");
        }
        public void CreatePersonTest()
        {
            //Eng Explanation
            //We want to make Unit Test on PersonTask.CreatePerson.  Input("can", "arslan"), Output(0) are expected result for this test.
            //But This class's constructor is need EfDbCon object as input. In Unit Test, externel functions are ignored. For this reason
            // EfObjects is mocked by MOQ framework

            //Tr Explanation
            //personTask.CreatePerson fonk üzerinde UnitTest yapmak istiyoruz. Input("can", "arslan"), Output(0) olarak bekliyoruz.
            //Bu sırada fonk.un bulunduğu classdaki Constructor input parametresi olarak EfDbCon objesi istiyor.
            //Unit Test sırasında biz sadece fonk. ve yerel yapılarına odaklanıcaz. Ef objeleri burada harici fonk olduğu için bu objelerin
            //gerekli olduğu yerlerde sahte objeler kullanacağız.
            mockDbConContext.Setup(m => m.Person).Returns(moqSetForPersonDbSet.Object);
            var personTask = new AppLayer.Tasks.PersonTask(mockDbConContext.Object);


            var result = personTask.CreatePerson("can", "arslan");

            Assert.AreEqual(result, 0);
        }