продолжение
начало тут -> JUnit part I
Еще хочу вам показать, как работает метод
Assert.fail(String)
– если будет вызван этот метод, тест будет провален. Удобно в случае если другие методы класса Assert
не могут сделать нам проверку. Допустим нам нужно запретить принимать new String(“”)
. Попробуем это сделать на конструкторе запретим передавать name = “” || null, age = 0; Sex = null
. Поехали …
Я добавил дополнительные поля для тестирования
private User user;
private User user1;
private User user2;
private User userNotAdd;
private User userNotAdd1;
и изменил метод setUp()
@Before
public void setUp() throws Exception {
user = new User("Евгений", 35, Sex.MALE);
user1 = new User("Марина", 34, Sex.FEMALE);
user2 = new User("Алина", 7, Sex.FEMALE);
userNotAdd = new User("", 0, null);
userNotAdd1 = new User(null, 0, null);
}
и добавил три метода теста
@Test
public void newUser_EMPTY_NAME() {
for (User user : User.getAllUsers()){
if (user.getName() != null && user.getName().isEmpty()) {
Assert.fail("Попытка создания пользователя с пустым именем");
}
}
}
@Test
public void newUser_AGE_ZERO() {
for (User user : User.getAllUsers()) {
if (user.getAge() <= 0) {
Assert.fail("Попытка создания пользователя c не допустимым возрастом");
}
}
}
@Test
public void newUser_SEX_NO_NULL() {
for (User user : User.getAllUsers()) {
if (user.getSex() == null) {
Assert.fail("Попытка создания пользователя с указанием пола = null");
}
}
}
В тестах мы проходим по списку добавленных пользователей, и смотрим есть ли не допустимые данные.
Запускаем тесты оптом, и видим такую картину...
Тут видно, наши тесты для конструктора поломались, а так же зацепило еще пару тестов
Теперь нам нужно изменить конструктор, чтобы он не добавлял в список пользователей, пользователя с недопустимыми параметрами, сделаем это так:
public User(String name, int age, Sex sex) {
if (name != null && !name.isEmpty() && age > 0 && sex != null){
this.name = name;
this.age = age;
this.sex = sex;
if (!hasUser()) {
countId++;
this.id = countId;
allUsers.put(id, this);
}
}
}
Запускаем наши тесты и видим, что у нас все по красоте
Подведем итог, JUnit отличный инструмент для покрытия своего кода тестами. JUnit сработает еще лучше, в связке с Maven, при сборке проекта, Maven обязательно проведет все тесты, и потом соберет наш готовый проект, но если тесты будут провалены, проект не будет собран, и мы будем знать причины, и так будет легче разобраться где именно поломка.
Второй плюс JUnit это случай Рефакторинга, тесты JUnit помогут нам проследить чтобы логика нашей программы не поломалась. А в больших проектах без системы автоматического тестирования жизнь не возможна, хотя может и возможна, но двигаться ваш проект будет со скоростью черепахи … или как то так …
Если мы хорошо покроем тестами наш код, то можем быть уверены, что у нашего клиента, наш продукт будет отлично работать.
P/S Выражаю огромную благодарность Сергееву Виктору!!!
Вот ссылки на видео урок, в котором он нас обучал:
Спасибо за внимание!!!
Хорошего вам настроения!!!
И да спаси вас Бог от индускода!!!
...еще если у кого будет интерес покапаться в исходном коде для статьи... стучитесь... с поделюсь
тут начало — JUnit part I
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ