WorkShop 08.02.2017


1

Здравейте, 

Ще се качат ли авторските решения или видео от Workshop-a?




Отговори



0

Ако някой може да подскаже точно как трябва да изглежда този тест:

Should return a list of students and trainers.

  • Hint: Only check if the method iterates over the collections, do not check the format of the users.


от encho.enevski (316 точки)


1
Стивън показа примерно писане на теста с Moq, а аз се мъчех да го напиша с Just Mock и почти 1 час, даже с помощт от Марто и не успяхме да го подкараме (все изкарваше, че теста не минава, защото се очаква да се извика метода веднъж, пък не се отчита никакво извикване). Идеята е че, за да провериш дали се итерира конкретната колекция, гледаш дали се извиква метода вътре в нея, който беше ToString(). Правеше се мокнат студент, адваш го към колекцията и после проверяваш метода се извиква един път. Първо се сетъпваше се студента, а после в Assert-a се Verify-ваше, но понеже не го записах, не знам как точно беше :D

от olebg (598 точки)

0
Дейба :D Добре де ще го измислим някак :D Иначе що годе другите тестове ги направих само това ме запъна.

от encho.enevski (316 точки)



2
Здравейте, колеги. Форматът на Workshop-а сряда беше решаване на тази задача - Цък - от курсистите с помощ на трейнърите. Workshop-ът утре ще е решаване на същата задача, но от трейнърите и ще има записано видео, което предполагам ще отговори на доста от въпросите ви.

от Arnaudov_St (394 точки)


0

Някаква идея, как да накарам този тест да заработи. Не мога да разбера къде е проблема.

[TestMethod] public void ShouldReturnSuccessfulMessageWhenStudentIsAdded() { //Arrange var engineMock = Mock.Create<IEngine>(); var factoryMock = Mock.Create<IAcademyFactory>(); var studentMock = Mock.Create<IStudent>(); var seasonMock = Mock.Create<ISeason>(); Mock.Arrange(() => studentMock.Username).Returns("Pesho"); Mock.Arrange(() => engineMock.Students).Returns(new List<IStudent>() { studentMock }); Mock.Arrange(() => engineMock.Seasons).Returns(new List<ISeason>() { seasonMock }); Mock.Arrange(() => seasonMock.Students).Returns(new List<IStudent>() { studentMock }); var command = new AddStudentToSeasonCommand(factoryMock, engineMock); //Act var result = command.Execute(new List<string>() { "Pesho", "0" }); //Assert StringAssert.Contains(result, "Pesho"); //StringAssert.Contains(result, "0"); }

В момента както е написано, дава грешка, че има такъв студент, но пробвах какви ли не варианти, и или е тази грешка, или ми казва, ако променя името в параметрите на Execute-ването на командата на друго + търсения стринг долу в Assert-a пък ми дава, че няма съвпадание.


от olebg (598 точки)


1
Според мен не трябва да добяваш (Arrange-ваш) studentMock в seasonMock (така като вече има един такъв студент в "сезона" и ти после с команда execute го добавяш втори път). Също на мен по-прегледно би ми изглеждало ако Arrange-ваш seasonMock-a преди да го Arrange-ваш към engineMock, тъй като така върви последователността - първо се "настройват" нещата, които иска engine-a и след това самия engine.

от qwerty123 (157 точки)

0
[TestMethod] public void ShouldReturnSuccessfulMessageWhenStudentIsAdded() { //Arrange var engineMock = Mock.Create<IEngine>(); var factoryMock = Mock.Create<IAcademyFactory>(); var studentMock = Mock.Create<IStudent>(); var seasonMock = Mock.Create<ISeason>(); Mock.Arrange(() => seasonMock.Students) .Returns(new List<IStudent>() { studentMock }); Mock.Arrange(() => engineMock.Seasons) .Returns(new List<ISeason>() { seasonMock }); Mock.Arrange(() => engineMock.Students) .Returns(new List<IStudent>() { studentMock }); var command = new AddStudentToSeasonCommand(factoryMock, engineMock); //Act var result = command.Execute(new List<string>() { "Pesho", "0" }); //Assert StringAssert.Contains(result, "Pesho"); StringAssert.Contains(result, "0"); }

Така написано казва следното "System.InvalidOperationException: Sequence contains no matching element".


от olebg (598 точки)



-2
...............

от hankrum (71 точки)