• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Testowanie kontrolerów Asp Net MVC

+1 głos
82 wizyt
pytanie zadane 11 października 2018 w C# i .NET przez tomek2323 Użytkownik (910 p.)

Jakie testy można by napisać dla tych kontrolerów.Testować interfejsu się nie da ,a u mnie same repozytoria.

public class HomeController : Controller
    {

        private IMainCategoryByCitiesRepository repository;
        private IIntermediateCategoryRepository repositoryIntermediate;

        public HomeController(IMainCategoryByCitiesRepository repository, IIntermediateCategoryRepository repositoryIntermediate)
        {
            this.repository = repository;
            this.repositoryIntermediate = repositoryIntermediate;
        }



        public ActionResult Index()
        {
            return View();
        }

        public ViewResult List()
        {

            return View(repository.MainCategoryByCities);


dla tej mam test

 [TestFixture]
    class ForumTests
    {

        [Test]
        public void List_Test()
        {
            Mock<IMainCategoryByCitiesRepository> mock = new Mock<IMainCategoryByCitiesRepository>();
            mock.Setup(m => m.MainCategoryByCities).Returns(new MainCategoryByCities[]
            {
               new MainCategoryByCities(){ MainCategoryByCitiesId=1,CityName="Aleksandrów"  },
                new MainCategoryByCities(){ MainCategoryByCitiesId=2,CityName="Bydgoszcz"  },
                 new MainCategoryByCities(){ MainCategoryByCitiesId=3,CityName="Chełmno"  },
                  new MainCategoryByCities(){ MainCategoryByCitiesId=4,CityName="Grudziądz"  },
                   new MainCategoryByCities(){ MainCategoryByCitiesId=5,CityName="Świecie"  }


            });

            Mock<IIntermediateCategoryRepository> mock2 = new Mock<IIntermediateCategoryRepository>();




            HomeController controller = new HomeController(mock.Object, mock2.Object);

            IEnumerable<MainCategoryByCities> result = (IEnumerable<MainCategoryByCities>)controller.List().Model;
            MainCategoryByCities[] mainCategoryArray = result.ToArray();

            Assert.IsTrue(mainCategoryArray.Length == 5);
            Assert.AreEqual(mainCategoryArray[0].CityName, "Aleksandrów");
            Assert.AreEqual(mainCategoryArray[2].CityName, "Chełmno");
            Assert.AreEqual(mainCategoryArray[4].MainCategoryByCitiesId, 5);

        }



        }



        public ViewResult Show_IntermediateCategory_List(int id)
        {
            List<IntermediateCategory> list = new List<IntermediateCategory>();

            list = repositoryIntermediate.GetIntermediateCategory_ById(id).ToList();



            return View(list);

        }
}




public class TopicController : Controller
    {
        ITopicRepository repository;
        public TopicController(ITopicRepository repository)
        {
            this.repository = repository;
        }

        public ViewResult Show_Topics(int id)
        {

            ViewBag.IntermediateCategory_Id = id;

            List<Topic> TopicList = repository.Get_Topics_ByIntermediateCategory(id).ToList();


            return View(TopicList);
        }

        [Authorize]
        public ViewResult Add_New_Topic(int id)
        {
            

            ViewBag.InterId = id;

            return View(new Topic());
        }


        [HttpPost]
        public RedirectToRouteResult Add_New_Topic(Topic topic)
        {

            string UserId= User.Identity.GetUserId();
            repository.Add_New_Topic_To_Database(topic,UserId);

            return RedirectToAction("Show_Topics",new {controller="Topic",action="Show_Topics",id=topic.IntermediateCategoryId });
        }

        public ActionResult Go_To_Topic(int id)
        {
            TopicViewModel viewModel = repository.Get_Topic_ViewModel(id);

            return View(viewModel);
        }


        [Authorize]
        public ActionResult Add_New_Comment(int id)
        {

            Topic topic = repository.Get_Topic_By_Id(id);

            AddingCommentViewModel adding = new AddingCommentViewModel();

            adding.topic = topic;


            
            return View(adding);
            
        }

        [HttpPost]
        [Authorize]
        public RedirectToRouteResult Add_New_Comment(Comment comment)
        {
            string UserId = User.Identity.GetUserId();
            repository.Add_New_Comment_To_Topic(comment,UserId);

            return RedirectToAction("Go_To_Topic", new { controller = "Topic", action = "Go_To_Topic", id = comment.TopicID });

        }




Interfejs 


namespace ForumProject.Repository
{
    public interface ITopicRepository
    {
        IEnumerable<Topic> Topics { get; }
        IEnumerable<Topic> Get_Topics_ByIntermediateCategory(int id);
        MainCategoryByCities Get_MainCategoryByCities_To_Add(int id);
        bool Add_New_Topic_To_Database(Topic topic,string UserId);
        TopicViewModel Get_Topic_ViewModel(int id);
        bool Add_New_Comment_To_Topic(Comment comment,string UserId);
        Topic Get_Topic_By_Id(int id);
    }


    public interface IMainCategoryByCitiesRepository
    {

        IEnumerable<MainCategoryByCities> MainCategoryByCities { get; }



    }


    public interface IIntermediateCategoryRepository
    {

        IEnumerable<IntermediateCategory> IntermediateCategory { get; }


        IEnumerable<IntermediateCategory> GetIntermediateCategory_ById(int id);


    }








}









 

1 odpowiedź

0 głosów
odpowiedź 16 października 2018 przez pulson666 Stary wyjadacz (10,510 p.)
Kontrolerów się nie testuje. kontroler ma tylko zwrócić wynik. Cała logika siedzi po stronie serwisów czyli klas które implementują interfejs i to je testujesz. Do jakiej klasy implementujesz/dziedziczysz interfejs? To właśnie ją przetestuj :)

Podobne pytania

0 głosów
0 odpowiedzi 84 wizyt
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 20 lutego 2018 w C# i .NET przez tomek2323 Użytkownik (910 p.)
0 głosów
0 odpowiedzi 103 wizyt
pytanie zadane 19 sierpnia 2016 w C# i .NET przez b7roul Nowicjusz (120 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

59,199 zapytań

104,616 odpowiedzi

216,478 komentarzy

31,589 pasjonatów

Przeglądających: 175
Pasjonatów: 1 Gości: 174

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...