• 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
90 wizyt
pytanie zadane 11 października 2018 w C# i .NET przez tomek2323 Użytkownik (950 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,560 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
1 odpowiedź 51 wizyt
pytanie zadane 7 marca w C# i .NET przez Krystek102 Bywalec (2,180 p.)
0 głosów
0 odpowiedzi 106 wizyt
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 20 lutego 2018 w C# i .NET przez tomek2323 Użytkownik (950 p.)
Porady nie od parady
Forum posiada swój własny chat IRC, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

62,316 zapytań

108,446 odpowiedzi

226,391 komentarzy

35,096 pasjonatów

Przeglądających: 197
Pasjonatów: 7 Gości: 190

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.

...