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"); }
public void CreatePersonTest() { var personTask = new AppLayer.Tasks.PersonTask(dbCon); int result = personTask.CreatePerson("can", "arslan"); Assert.AreNotEqual(result, 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); }