Skip to content

Latest commit

 

History

History

06-unit-testing-and-mocking

Unit Testing and Mocking

Освен писане на code from scratch, в практиката много често се налага и да поддържаме, fix-ваме или пишем тестове за вече съществуващ код.

Целта на упражнението днес е, да създадете и изпълните JUnit тестове, спрямо налична имплементация.

MyFitnessPal 💪

Ще разгледаме модул от опростена версия на MyFitnessPal: приложение, в което следим калориите, които приемаме с храната всеки ден. В него отбелязваме какво хапваме на закуска, обяд, вечеря или междинна закуска - като храна и количество, а приложението се грижи да смята приетите калории вместо нас. Такъв тип приложения използват някаква база данни или уеб услуга, предоставяща информация за състава на дадена храна като макронутриенти (въглехидрати, мазнини и протеини), на база на която автоматично се пресмята и калорийната ѝ стойност.

Готова имплементация

В ./resources ще намерите имплементация на интерфейса FoodDiary, която реализира дневник на храненията през даден ден. Тя разчита на някаква имплементация на интерфейса NutritionInfoAPI, чрез която се сдобива с информация за състава като макронутриенти на дадената храна. В една реална система, такава имплементация би разчитала на база от данни или уеб услуга. Нашият фокус обаче е да тестваме автоматично имплементацията на хранителния дневник, в изолация и без да се интересуваме, как е имплементиранo въпросното API за хранителната информация, приемайки, че то работи коректно.

Важно

⚠️ Имайте предвид, че имплементацията съдържа някои бъгове, които трябва да откриете и отстраните в процеса на тестване. За да бъде той ефективен, първо напишете тест за някой сценарий, след това оправете бъга, който сте намерили с него.

⚠️ Не сме предоставили имплементация на интерфейса NutritionInfoAPI - вместо такава, в Unit тестовете си трябва да използвате Mockito и да "мокнете" това API. Алтернативно, може да направите и свой прост stub за него.

Проектът ви трябва да има следната структура:

src
└─ bg/sofia/uni/fmi/mjt/myfitnesspal/
    ├─ diary
    |    ├─ DailyFoodDiary.java
    |    ├─ FoodDiary.java
    |    ├─ FoodEntry.java
    |    ├─ FoodEntryProteinContentComparator.java
    |    └─ Meal.java
    ├─ exception
    |    └─ UnknownFoodException.java
    └─ nutrition
         ├─ MacroNutrient.java
         ├─ NutritionInfo.java
         └─ NutritionInfoAPI.java
test
└─ bg/sofia/uni/fmi/mjt/myfitnesspal/
    └─ (...)

В грейдъра качете общ .zip архив на двете директории src и test.

Успех и не се притеснявайте да задавате въпроси! ⭐