IMPORTANT! Completed tasks are evaluate at the final result and the manner of applying the knowledge gained in the course
http://www.jmock.org/getting-started.html
Mock Roles, Not Objects
Introduce Parameter Object
Logging is also feature
Discovery Testing the Game Of Life
SOLID Principles Explained
SOLID Principles in real world
Bible Books
Test Doubles - fake, mock, stub
Note: Alternatives of jmock are EasyMock and Mockito, but we use in our projects only jmock.
Sandbox Examples:
- Да се използват мок обекти за тестване на следната функционалност за филтриране на неподходящи адреси
public interface Endpoint {
boolean matches(String url);
}
public class EndpointFilter {
private final Endpoint[] endpoints;
public EndpointFilter(Endpoint... endpoints) {
this.endpoints = endpoints;
}
public boolean shouldFilter(String url) {
for (Endpoint each : endpoints) {
if (each.matches(url)) {
return true;
}
}
return false;
}
}- Да се напишат подходящи тестове на EndpointFilter обекта, чрез използване на мок обекти на Endpoint интерфейса
- Да се напише имплементация на Endpoint интерфейса StartsWithKeyword, която да представлява Endpoint, който матчва единствено когато адреса започва с подадената дума
- Да се напишат тестове, които да проверяват че StartsWithEndpoint изпълнява нужното поведение за работата на EndpointFilter.
- Да се реализира приложение за изпращане на SMS съобщения чрез външна система.
Поради факта, че външната система не е реализирана, приложението трябва да може да работи и в тестов режим, който да му позволява да работи без външната система за разпращане на съобщенията - задачата трябва да се реализира Ñ� TDD подход. Всяко съобщение трябва ба има получател, заглавие и текст ако едно от тях липсва- съобщението не може да бъде изпратено. Дължината на текста на съобщението трябва да бъде между 1 и 120 символа, в противен случай съобщението не може да бъде изпратено. Да се определят различните сценарии и да се тестват.
- Да се реализира service клас, който изълнява следните функционалности:
-
получава годините на човек под формата на String. Валидира този стринг посредством валидатор , като проверява дали стойността е валидна. Ако е валидна (валидни стойности: от 10 до 100), стойността може да бъде запазена в база данни.
-
извлича годините на човек от база данни. Ако стойността е по-голяма от 18- връща true. Ако е по-малка- връща false.
// The service class
public class UserRepository {
public UserRepository(UserDB userDB, Validator validator) {
..
}
public void registerUser(User user) {
...
}
public boolean isAdult(String name) {
````
}
}Забележка: Да се тестват методите в изолация. Да не се създават реални имплементации на валидатора и класа за връзка с базата данни. Задачата да се реализира с TDD подход.