From 4491562d4df6dcc855b70ed43e7c602099e27452 Mon Sep 17 00:00:00 2001 From: Yuriy Dvorzhetskiy Date: Tue, 24 Nov 2020 22:37:41 +0600 Subject: [PATCH] 2020-11 - 01 --- 2020-11/junit/.gitignore | 24 ++++++++++++ 2020-11/junit/pom.xml | 38 +++++++++++++++++++ .../java/ru/otus/junit/dao/PersonDao.java | 16 ++++++++ .../java/ru/otus/junit/dao/PersonDaoImpl.java | 36 ++++++++++++++++++ .../junit/dao/PersonNotFoundException.java | 8 ++++ .../java/ru/otus/junit/domain/Person.java | 32 ++++++++++++++++ .../ru/otus/junit/service/PersonService.java | 16 ++++++++ .../otus/junit/service/PersonServiceImpl.java | 37 ++++++++++++++++++ .../java/ru/otus/junit/domain/PersonTest.java | 23 +++++++++++ .../junit/service/PersonServiceImplTest.java | 37 ++++++++++++++++++ 2020-11/spring-01/.gitignore | 24 ++++++++++++ 2020-11/spring-01/pom.xml | 17 +++++++++ 2020-11/spring-01/spring-01-exercise/pom.xml | 20 ++++++++++ .../src/main/java/ru/otus/spring/Main.java | 17 +++++++++ .../java/ru/otus/spring/dao/PersonDao.java | 8 ++++ .../ru/otus/spring/dao/PersonDaoSimple.java | 10 +++++ .../java/ru/otus/spring/domain/Person.java | 20 ++++++++++ .../ru/otus/spring/service/PersonService.java | 8 ++++ .../spring/service/PersonServiceImpl.java | 17 +++++++++ .../src/main/resources/spring-context.xml | 11 ++++++ 20 files changed, 419 insertions(+) create mode 100644 2020-11/junit/.gitignore create mode 100644 2020-11/junit/pom.xml create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDao.java create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDaoImpl.java create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/dao/PersonNotFoundException.java create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/domain/Person.java create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/service/PersonService.java create mode 100644 2020-11/junit/src/main/java/ru/otus/junit/service/PersonServiceImpl.java create mode 100644 2020-11/junit/src/test/java/ru/otus/junit/domain/PersonTest.java create mode 100644 2020-11/junit/src/test/java/ru/otus/junit/service/PersonServiceImplTest.java create mode 100644 2020-11/spring-01/.gitignore create mode 100644 2020-11/spring-01/pom.xml create mode 100644 2020-11/spring-01/spring-01-exercise/pom.xml create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/Main.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/domain/Person.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonService.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java create mode 100644 2020-11/spring-01/spring-01-exercise/src/main/resources/spring-context.xml diff --git a/2020-11/junit/.gitignore b/2020-11/junit/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2020-11/junit/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2020-11/junit/pom.xml b/2020-11/junit/pom.xml new file mode 100644 index 00000000..6184cf4f --- /dev/null +++ b/2020-11/junit/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + ru.otus + junit + 1.0 + + + + org.springframework.boot + spring-boot-starter-parent + 2.3.0.RELEASE + + + + + 11 + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.junit.vintage + junit-vintage-engine + + + + + diff --git a/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDao.java b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDao.java new file mode 100644 index 00000000..6ff0d1ef --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDao.java @@ -0,0 +1,16 @@ +package ru.otus.junit.dao; + +import ru.otus.junit.domain.Person; + +import java.util.List; + +public interface PersonDao { + + Person getByName(String name) throws PersonNotFoundException; + + List getAll(); + + void deleteByName(String name) throws PersonNotFoundException; + + void save(Person person); +} diff --git a/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDaoImpl.java b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDaoImpl.java new file mode 100644 index 00000000..59aa9b5d --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonDaoImpl.java @@ -0,0 +1,36 @@ +package ru.otus.junit.dao; + +import ru.otus.junit.domain.Person; + +import java.util.List; + +public class PersonDaoImpl implements PersonDao { + + // здесь будет поле - список Person-ов + + @Override + public Person getByName(String name) throws PersonNotFoundException { + // TODO: реализовать поиск в списке по имени (по технике Test-First) + // TODO: да, этот метод может бросать Exception, и это нужно покрыть другим тестом + return null; + } + + @Override + public List getAll() { + // TODO: реализовать получние всех Person (по технике Test-First) + return null; + } + + @Override + public void deleteByName(String name) throws PersonNotFoundException { + // TODO: реализовать удаление по имени (по технике Test-First) + // TODO: да, этот метод может бросать Exception, и это нужно покрыть другим тестом + } + + @Override + public void save(Person person) { + // TODO: этот метод должен найти по имени в списке + // TODO: если такой есть - заменить + // TODO: если такого нет - добавить + } +} diff --git a/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonNotFoundException.java b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonNotFoundException.java new file mode 100644 index 00000000..12f78d77 --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/dao/PersonNotFoundException.java @@ -0,0 +1,8 @@ +package ru.otus.junit.dao; + +public class PersonNotFoundException extends RuntimeException { + + public PersonNotFoundException(String message) { + super(message); + } +} diff --git a/2020-11/junit/src/main/java/ru/otus/junit/domain/Person.java b/2020-11/junit/src/main/java/ru/otus/junit/domain/Person.java new file mode 100644 index 00000000..10d5294c --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/domain/Person.java @@ -0,0 +1,32 @@ +package ru.otus.junit.domain; + +@SuppressWarnings({"WeakerAccess", "unused"}) +public class Person { + + private int age; + private String name; + + public Person(int age, String name) { + this.age = age; + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void birthDay() { + this.age++; + } +} diff --git a/2020-11/junit/src/main/java/ru/otus/junit/service/PersonService.java b/2020-11/junit/src/main/java/ru/otus/junit/service/PersonService.java new file mode 100644 index 00000000..0cb144f1 --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/service/PersonService.java @@ -0,0 +1,16 @@ +package ru.otus.junit.service; + +import ru.otus.junit.domain.Person; + +import java.util.List; + +public interface PersonService { + + Person getByName(String name); + + List getAll(); + + boolean existsWithName(String name); + + void save(Person p); +} diff --git a/2020-11/junit/src/main/java/ru/otus/junit/service/PersonServiceImpl.java b/2020-11/junit/src/main/java/ru/otus/junit/service/PersonServiceImpl.java new file mode 100644 index 00000000..52b82f10 --- /dev/null +++ b/2020-11/junit/src/main/java/ru/otus/junit/service/PersonServiceImpl.java @@ -0,0 +1,37 @@ +package ru.otus.junit.service; + +import ru.otus.junit.dao.PersonDao; +import ru.otus.junit.domain.Person; + +import java.util.List; + +public class PersonServiceImpl implements PersonService { + + private final PersonDao dao; + + PersonServiceImpl(PersonDao dao) { + this.dao = dao; + } + + @Override + public Person getByName(String name) { + return dao.getByName(name); + } + + @Override + public List getAll() { + // TODO: реализовать данный метод по технике Test-First + return null; + } + + @Override + public boolean existsWithName(String name) { + // TODO: реализовать данный метод по технике Test-First + return false; + } + + @Override + public void save(Person p) { + // TODO: реализовать данный метод по технике Test-First + } +} diff --git a/2020-11/junit/src/test/java/ru/otus/junit/domain/PersonTest.java b/2020-11/junit/src/test/java/ru/otus/junit/domain/PersonTest.java new file mode 100644 index 00000000..30366c3f --- /dev/null +++ b/2020-11/junit/src/test/java/ru/otus/junit/domain/PersonTest.java @@ -0,0 +1,23 @@ +package ru.otus.junit.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@DisplayName("Класс Person") +class PersonTest { + + @DisplayName("корректно создаётся конструктором") + @Test + void shouldHaveCorrectConstructor() { + Person person = new Person(42, "Ivan"); + + assertEquals("Ivan", person.getName()); + assertEquals(42, person.getAge()); + } + + // TODO: @DisplayName("должен") + + // TODO: @DisplayName("должен увеличивать возраст при вызове birthDay") +} diff --git a/2020-11/junit/src/test/java/ru/otus/junit/service/PersonServiceImplTest.java b/2020-11/junit/src/test/java/ru/otus/junit/service/PersonServiceImplTest.java new file mode 100644 index 00000000..47fa7a7e --- /dev/null +++ b/2020-11/junit/src/test/java/ru/otus/junit/service/PersonServiceImplTest.java @@ -0,0 +1,37 @@ +package ru.otus.junit.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import ru.otus.junit.dao.PersonDao; +import ru.otus.junit.domain.Person; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; + +@ExtendWith(MockitoExtension.class) +class PersonServiceImplTest { + + @Mock + private PersonDao personDao; + + private PersonService personService; + + @BeforeEach + void setUp() { + personService = new PersonServiceImpl(personDao); + } + + @Test + void getByName() { + // TODO: используйте eq() mapper вместо any() + given(personDao.getByName(any())) + .willReturn(new Person(10, "Ivan")); + + assertThat(personService.getByName("Ivan")) + .isNotNull(); // TODO: сравните с помощью equals + } +} diff --git a/2020-11/spring-01/.gitignore b/2020-11/spring-01/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2020-11/spring-01/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2020-11/spring-01/pom.xml b/2020-11/spring-01/pom.xml new file mode 100644 index 00000000..6658aaa0 --- /dev/null +++ b/2020-11/spring-01/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + ru.otus + spring-01 + 1.0 + + pom + + + spring-01-exercise + spring-01-solution + + diff --git a/2020-11/spring-01/spring-01-exercise/pom.xml b/2020-11/spring-01/spring-01-exercise/pom.xml new file mode 100644 index 00000000..e3aa2772 --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + ru.otus + spring-01-exercise + 1.0 + + + 11 + 11 + UTF-8 + + + + + + diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/Main.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..e3201a16 --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,17 @@ +package ru.otus.spring; + +//import org.springframework.context.support.ClassPathXmlApplicationContext; +import ru.otus.spring.domain.Person; + +public class Main { + + public static void main(String[] args) { + // TODO: создайте здесь класс контекста + + // TODO: Получите Person Service + + // Получите Person "Ivan" + Person ivan = null; + System.out.println("name: " + ivan.getName() + " age: " + ivan.getAge()); + } +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java new file mode 100644 index 00000000..d33939bd --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDao.java @@ -0,0 +1,8 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public interface PersonDao { + + Person findByName(String name); +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java new file mode 100644 index 00000000..7f7c97c6 --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/dao/PersonDaoSimple.java @@ -0,0 +1,10 @@ +package ru.otus.spring.dao; + +import ru.otus.spring.domain.Person; + +public class PersonDaoSimple implements PersonDao { + + public Person findByName(String name) { + return new Person(name, 18); + } +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/domain/Person.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/domain/Person.java new file mode 100644 index 00000000..c23be0c6 --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/domain/Person.java @@ -0,0 +1,20 @@ +package ru.otus.spring.domain; + +public class Person { + + private final String name; + private final int age; + + public Person(String name, int age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonService.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonService.java new file mode 100644 index 00000000..9b83e7de --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonService.java @@ -0,0 +1,8 @@ +package ru.otus.spring.service; + +import ru.otus.spring.domain.Person; + +public interface PersonService { + + Person getByName(String name); +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java new file mode 100644 index 00000000..794c29dd --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/java/ru/otus/spring/service/PersonServiceImpl.java @@ -0,0 +1,17 @@ +package ru.otus.spring.service; + +import ru.otus.spring.dao.PersonDao; +import ru.otus.spring.domain.Person; + +public class PersonServiceImpl implements PersonService { + + private final PersonDao dao; + + public PersonServiceImpl(PersonDao dao) { + this.dao = dao; + } + + public Person getByName(String name) { + return dao.findByName(name); + } +} diff --git a/2020-11/spring-01/spring-01-exercise/src/main/resources/spring-context.xml b/2020-11/spring-01/spring-01-exercise/src/main/resources/spring-context.xml new file mode 100644 index 00000000..2cb9eabe --- /dev/null +++ b/2020-11/spring-01/spring-01-exercise/src/main/resources/spring-context.xml @@ -0,0 +1,11 @@ + + + + + + + +