Освен писане на code from scratch, в практиката много често се налага и да поддържаме, fix-ваме или пишем тестове за вече съществуващ код.
Целта на упражнението днес е, да създадете и изпълните JUnit тестове, спрямо налична имплементация.
Ще разгледаме модул от опростена версия на 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
.
Успех и не се притеснявайте да задавате въпроси! ⭐