diff --git a/README.md b/README.md index eb76daf..4c489f5 100644 --- a/README.md +++ b/README.md @@ -1 +1,30 @@ -# spring-core-template \ No newline at end of file +# Шаблон для практической работы по теме Spring Core + +### Задание +1. В `pom.xml` добавьте зависимость `org.springframework:spring-context:5.2.1.RELEASE`. + +1. В методе main создайте новый экземпляр класса `AnnotationConfigApplicationContext` - контейнер, в котором +будут храниться ваши бины. На вход ему будет передаваться класс `MainConfiguration`. В конфигурации используйте такие +аннотации, как `@Configuration` и `@Bean`. + +1. В классе `MainConfiguration` сделайте импорт двух других классов-конфигураций: + * В классе `RepositoryConfiguration` сделайте описание бинов `ArrayListItemRepository` и `LinkedListItemRepository` + 1. В `ArrayListItemRepository` объекты `Item` должны храниться в `ArrayList` и `initialSequence` считываться из пропертей. + 1. В `ArrayListItemRepository` объекты `Item` должны храниться в `LinkedList` и `initialSequence` генерироваться случайно. + * В классе `InitializerConfiguration` реализуйте factory-bean `ColorFactory`, который умеет выдавать сущности + бинов `Color` по запросу `getColor`. Бин `Color` обязан создаваться каждый раз заново. + +1. Имплементируйте `SimpleItemService` - сделайте так, чтобы необходимые зависимости добавлялись к нему через метод `set..` +и конструктор. В чём разница этих подходов? + +1. Сделайте так, чтобы бин `ColorFactory` создавался не на этапе создания контекста, а при первом обращении к нему. + +1. Сделайте так, чтобы используемая реализация `ItemRepository` выбиралась исходя из проперти `item.repository.implementation` +из значений `array` или `linked`. При отсутствии проперти необходимо использовать `ArrayListItemRepository`. + +1. В классе `SpringCoreTemplate` в методе `main` создайте экземпляр `ApplicationContext` и передайте ему на вход +созданный экземпляр `AnnotationConfigApplicationContext`. Сделайте парочку вызовов метода `getBean`, чтобы убедиться, +что все бины создались и корректно работают. + +1. Подключите зависимость `org.springframework:spring-test:jar:5.2.1.RELEASE`. Напишите тесты, которые проверяют основную +бизнес-логику и то, что ваш контекст загружается успешно. diff --git a/pom.xml b/pom.xml index a98d368..bd8e1e8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,43 +1,94 @@ - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - - com.epam.edu - spring-core-template - 0.0.1-SNAPSHOT - spring-core-template - Demo project for Spring Boot + + 4.0.0 - - 1.8 - + com.EvDroid + spring-core-template + 1.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter - + + 8 + 8 + + 5.3.29 + 5.3.29 + + 5.10.0 + 1.10.0 + + 3.1.2 + + 3.1.2 + - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - + + + org.springframework + spring-context + ${spring-context.version} + + + org.springframework + spring-test + ${spring-test-version} + test + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.junit.platform + junit-platform-launcher + ${junit-platform-launcher.version} + test + + + + + + org.junit + junit-bom + ${junit-bom.version} + pom + import + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + true + + + junit.platform.output.capture.stdout=true + junit.platform.output.capture.stderr=true + junit.platform.output.capture.maxBuffer=8192 + + + + + + + + + + org.apache.maven.plugins + maven-surefire-report-plugin + ${maven-surefire-report-plugin.version} + + + + \ No newline at end of file diff --git a/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java b/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java index 7d6ea06..c64bf01 100644 --- a/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java +++ b/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java @@ -1,14 +1,12 @@ package com.epam.edu.spring.core.template; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; +import com.epam.edu.spring.core.template.configuration.MainConfiguration; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; -@SpringBootApplication public class SpringCoreTemplate { - public static void main(String[] args) { - SpringApplication.run(SpringCoreTemplate.class, args); - //TODO get service bean and do some business logic with DTO`s - } - + public static void main(String[] args) { + ApplicationContext context = new AnnotationConfigApplicationContext(MainConfiguration.class); + } } diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java new file mode 100644 index 0000000..4eb25f5 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java @@ -0,0 +1,20 @@ +package com.epam.edu.spring.core.template.configuration; + +import com.epam.edu.spring.core.template.factory.ColorFactoryBean; +import com.epam.edu.spring.core.template.entity.Color; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Scope; + +@Configuration +public class InitializerConfiguration { + + @Bean + @Lazy + @Scope(BeanDefinition.SCOPE_PROTOTYPE) + public Color colorBean(ColorFactoryBean colorFactoryBean) { + return colorFactoryBean.getObject(); + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java new file mode 100644 index 0000000..9547c75 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java @@ -0,0 +1,10 @@ +package com.epam.edu.spring.core.template.configuration; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@ComponentScan(basePackages = {"com.epam.edu.spring.core.template"}) +@Import({RepositoryConfiguration.class, InitializerConfiguration.class}) +public class MainConfiguration {} diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/MyConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/MyConfiguration.java deleted file mode 100644 index 12e5eab..0000000 --- a/src/main/java/com/epam/edu/spring/core/template/configuration/MyConfiguration.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.epam.edu.spring.core.template.configuration; - -//TODO add configuration -public class MyConfiguration { -} diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java new file mode 100644 index 0000000..1ab6e5e --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java @@ -0,0 +1,26 @@ +package com.epam.edu.spring.core.template.configuration; + +import com.epam.edu.spring.core.template.repository.ArrayListItemRepository; +import com.epam.edu.spring.core.template.repository.ItemRepository; +import com.epam.edu.spring.core.template.repository.LinkedListItemRepository; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; + +@Configuration +@PropertySource("classpath:application.properties") +public class RepositoryConfiguration { + + @Bean + public ItemRepository itemRepository( + @Value("${item.repository.implementation}") String repository) { + ItemRepository itemRepository; + if ("link".equalsIgnoreCase(repository)) { + itemRepository = new LinkedListItemRepository(); + } else { + itemRepository = new ArrayListItemRepository(); + } + return itemRepository; + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/entity/Color.java b/src/main/java/com/epam/edu/spring/core/template/entity/Color.java new file mode 100644 index 0000000..6d73f7e --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/entity/Color.java @@ -0,0 +1,8 @@ +package com.epam.edu.spring.core.template.entity; + +public enum Color { + THIS_COLOR, + THAT_COLOR, + SOME_COLOR, + MORE_COLOR +} diff --git a/src/main/java/com/epam/edu/spring/core/template/entity/Item.java b/src/main/java/com/epam/edu/spring/core/template/entity/Item.java new file mode 100644 index 0000000..79f2fe7 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/entity/Item.java @@ -0,0 +1,62 @@ +package com.epam.edu.spring.core.template.entity; + +public class Item { + private long id; + private String name; + private double price; + private Color color; + + public Item(long id, String name, double price, Color color) { + this.id = id; + this.name = name; + this.price = price; + this.color = color; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } + + @Override + public String toString() { + return "Item{" + + "id=" + + id + + ", name='" + + name + + '\'' + + ", price=" + + price + + ", color=" + + color + + '}'; + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/factory/ColorFactoryBean.java b/src/main/java/com/epam/edu/spring/core/template/factory/ColorFactoryBean.java new file mode 100644 index 0000000..012b1af --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/factory/ColorFactoryBean.java @@ -0,0 +1,32 @@ +package com.epam.edu.spring.core.template.factory; + +import com.epam.edu.spring.core.template.entity.Color; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.stereotype.Component; + +import java.util.Random; +import java.util.stream.Stream; + +@Component +public class ColorFactoryBean implements FactoryBean { + + private final Random random = new Random(); + + @Override + public Color getObject() { + return Stream.of(Color.values()) + .filter(color -> color.ordinal() == random.nextInt(Color.values().length)) + .findAny() + .orElseThrow(IllegalStateException::new); + } + + @Override + public Class getObjectType() { + return Color.class; + } + + @Override + public boolean isSingleton() { + return FactoryBean.super.isSingleton(); + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/AbstractRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/AbstractRepository.java new file mode 100644 index 0000000..48e06e2 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/repository/AbstractRepository.java @@ -0,0 +1,19 @@ +package com.epam.edu.spring.core.template.repository; + +import java.util.List; + +/** + * Абстрактный класс для хранения сущностей. ID сущности генерируется, исходя из initialSequence + * + * @param + */ +public abstract class AbstractRepository { + + protected long initialSequence = 0; + + protected List holder; + + abstract void setInitialSequence(int val); + + abstract void setHolder(); +} diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java new file mode 100644 index 0000000..0a50fc5 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java @@ -0,0 +1,52 @@ +package com.epam.edu.spring.core.template.repository; + +import com.epam.edu.spring.core.template.entity.Item; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Репозиторий, основанный на классе ArrayList. initialSequence должен браться из + * application.properties + */ +@Component +@PropertySource("classpath:application.properties") +public class ArrayListItemRepository extends AbstractRepository implements ItemRepository { + + private ArrayList holder; + + @Value("${initial.sequence}") + int initialSequence; + + @Override + public Item getById(long id) { + if (holder.stream().filter(item -> item.getId() == id).count() > 1) { + throw new IllegalStateException("More than 1 element found"); + } + return holder.stream().filter(item -> item.getId() == id).collect(Collectors.toList()).get(0); + } + + @Override + public boolean createItem(Item item) { + item.setId(initialSequence); + return holder.add(Objects.requireNonNull(item)); + } + + @Override + void setInitialSequence(int val) { + this.initialSequence += val; + } + + public int getInitialSequence() { + return this.initialSequence; + } + + @Override + void setHolder() { + this.holder = new ArrayList<>(); + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/ItemRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/ItemRepository.java new file mode 100644 index 0000000..a8e4437 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/repository/ItemRepository.java @@ -0,0 +1,10 @@ +package com.epam.edu.spring.core.template.repository; + +import com.epam.edu.spring.core.template.entity.Item; + +public interface ItemRepository { + + Item getById(long id); + + boolean createItem(Item item); +} diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java new file mode 100644 index 0000000..0eb8b73 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java @@ -0,0 +1,49 @@ +package com.epam.edu.spring.core.template.repository; + +import com.epam.edu.spring.core.template.entity.Item; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.util.LinkedList; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * Репозиторий, основанный на классе LinkedList. initialSequence должен случайно генерироваться из + * диапазона от 1 до 100 + */ +@Component +public class LinkedListItemRepository extends AbstractRepository implements ItemRepository { + + private LinkedList holder; + + @Value("#{T(java.lang.Math).random() * 100.0 }") + int initialSequence; + + @Override + public Item getById(long id) { + if (holder.stream().filter(item -> item.getId() == id).count() > 1) { + throw new IllegalStateException("More than 1 element found"); + } + return holder.stream().filter(item -> item.getId() == id).collect(Collectors.toList()).get(0); + } + + @Override + public boolean createItem(Item item) { + return holder.add(Objects.requireNonNull(item)); + } + + @Override + void setInitialSequence(int val) { + this.initialSequence += val; + } + + public int getInitialSequence() { + return this.initialSequence; + } + + @Override + void setHolder() { + this.holder = new LinkedList<>(); + } +} diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/MyRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/MyRepository.java deleted file mode 100644 index ab9bbaa..0000000 --- a/src/main/java/com/epam/edu/spring/core/template/repository/MyRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.epam.edu.spring.core.template.repository; - -//TODO add logic for CRUD operations -public class MyRepository { -} diff --git a/src/main/java/com/epam/edu/spring/core/template/service/ItemService.java b/src/main/java/com/epam/edu/spring/core/template/service/ItemService.java new file mode 100644 index 0000000..7c5af6d --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/service/ItemService.java @@ -0,0 +1,10 @@ +package com.epam.edu.spring.core.template.service; + +import com.epam.edu.spring.core.template.entity.Item; + +public interface ItemService { + + Item getById(long id); + + boolean createItem(Item item); +} diff --git a/src/main/java/com/epam/edu/spring/core/template/service/MyService.java b/src/main/java/com/epam/edu/spring/core/template/service/MyService.java deleted file mode 100644 index 4254f76..0000000 --- a/src/main/java/com/epam/edu/spring/core/template/service/MyService.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.epam.edu.spring.core.template.service; - -//TODO add logic for access to business objects -public class MyService { -} diff --git a/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java b/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java new file mode 100644 index 0000000..24438e0 --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java @@ -0,0 +1,39 @@ +package com.epam.edu.spring.core.template.service; + +import com.epam.edu.spring.core.template.entity.Item; +import com.epam.edu.spring.core.template.repository.ItemRepository; +import com.epam.edu.spring.core.template.validator.ItemValidator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SimpleItemService implements ItemService { + + private ItemRepository itemRepository; + private ItemValidator itemValidator; + + @Autowired + public SimpleItemService(ItemRepository itemRepository, ItemValidator itemValidator) { + this.itemRepository = itemRepository; + this.itemValidator = itemValidator; + } + + @Override + public Item getById(long id) { + return null; + } + + @Override + public boolean createItem(Item item) { + return false; + } + + public void setItemRepository(ItemRepository itemRepository) { + this.itemRepository = itemRepository; + } + + public void setItemRepository(ItemValidator itemValidator) { + this.itemValidator = itemValidator; + } + +} diff --git a/src/main/java/com/epam/edu/spring/core/template/validation/MyValidator.java b/src/main/java/com/epam/edu/spring/core/template/validation/MyValidator.java deleted file mode 100644 index 676bb35..0000000 --- a/src/main/java/com/epam/edu/spring/core/template/validation/MyValidator.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.epam.edu.spring.core.template.validation; - -//TODO add logic for validation -public class MyValidator { -} diff --git a/src/main/java/com/epam/edu/spring/core/template/validator/ItemValidator.java b/src/main/java/com/epam/edu/spring/core/template/validator/ItemValidator.java new file mode 100644 index 0000000..55cda3e --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/validator/ItemValidator.java @@ -0,0 +1,8 @@ +package com.epam.edu.spring.core.template.validator; + +import com.epam.edu.spring.core.template.entity.Item; + +public interface ItemValidator { + + boolean isItemValid(Item item); +} diff --git a/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java b/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java new file mode 100644 index 0000000..4f08ebe --- /dev/null +++ b/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java @@ -0,0 +1,13 @@ +package com.epam.edu.spring.core.template.validator; + +import com.epam.edu.spring.core.template.entity.Item; +import org.springframework.stereotype.Component; + +@Component +public class SimpleItemValidator implements ItemValidator { + + @Override + public boolean isItemValid(Item item) { + return item != null && item.getId() >= 0 && item.getName() != null && item.getPrice() > 0; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b13789..27d53ac 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,2 @@ - +initial.sequence=42 +item.repository.implementation=link \ No newline at end of file diff --git a/src/test/java/com/epam/edu/spring/core/template/SpringCoreTemplateTest.java b/src/test/java/com/epam/edu/spring/core/template/SpringCoreTemplateTest.java new file mode 100644 index 0000000..fdb5d72 --- /dev/null +++ b/src/test/java/com/epam/edu/spring/core/template/SpringCoreTemplateTest.java @@ -0,0 +1,93 @@ +package com.epam.edu.spring.core.template; + +import com.epam.edu.spring.core.template.configuration.MainConfiguration; +import com.epam.edu.spring.core.template.entity.Color; +import com.epam.edu.spring.core.template.repository.ArrayListItemRepository; +import com.epam.edu.spring.core.template.repository.LinkedListItemRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import org.springframework.util.ClassUtils; + +import java.util.Arrays; +import java.util.Objects; +import java.util.function.Predicate; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringJUnitConfig(classes = {MainConfiguration.class}) +@DisplayName("Spring beans tests") +class SpringCoreTemplateTest { + + @Autowired + private final ApplicationContext context = + new AnnotationConfigApplicationContext(MainConfiguration.class); + + @DisplayName("Test beans exists") + @ParameterizedTest + @MethodSource("getBeansWithClasses") + void testCorrectBeansInstance(String beanName, String clazz) { + assertTrue(isCorrectBean(context.getBean(beanName), clazz)); + } + + @Test + @DisplayName("Test array list initial sequence value") + void testInitialSequenceArrayList(@Value("${initial.sequence}") int propertyValue) { + ArrayListItemRepository arrayListItemRepository = + context.getBean("arrayListItemRepository", ArrayListItemRepository.class); + assertEquals(propertyValue, arrayListItemRepository.getInitialSequence()); + } + + @Test + @DisplayName("Test linked list initial sequence value") + void testRandomInitialSequenceLinkedList() { + LinkedListItemRepository linkedListItemRepository = + context.getBean("linkedListItemRepository", LinkedListItemRepository.class); + int initialSequence = linkedListItemRepository.getInitialSequence(); + assertTrue(initialSequence >= 0 && initialSequence < 100); + } + + @Test + @DisplayName("Test Color Bean") + void testColorFactoryBean() { + Color color = context.getBean("colorFactoryBean", Color.class); + boolean colorCheck = false; + colorCheck = Arrays.stream(Color.values()).anyMatch(Predicate.isEqual(color)); + assertTrue(colorCheck); + } + + @Test + @DisplayName("Test item repository type") + void testItemRepositoryType( + @Value("${item.repository.implementation=link}") String itemRepositoryProperty) { + Object itemRepository = context.getBean("itemRepository"); + if ("link".equalsIgnoreCase(itemRepositoryProperty)) { + assertTrue(isCorrectBean(itemRepository, "LinkedListItemRepository")); + } else { + assertTrue(isCorrectBean(itemRepository, "ArrayListItemRepository")); + } + } + + private boolean isCorrectBean(Object bean, String clazz) { + return Objects.nonNull(bean) && ClassUtils.getUserClass(bean).getSimpleName().equals(clazz); + } + + private static Stream getBeansWithClasses() { + return Stream.of( + Arguments.of("mainConfiguration", "MainConfiguration"), + Arguments.of("initializerConfiguration", "InitializerConfiguration"), + Arguments.of("repositoryConfiguration", "RepositoryConfiguration"), + Arguments.of("arrayListItemRepository", "ArrayListItemRepository"), + Arguments.of("linkedListItemRepository", "LinkedListItemRepository"), + Arguments.of("simpleItemService", "SimpleItemService"), + Arguments.of("simpleItemValidator", "SimpleItemValidator")); + } +} diff --git a/src/test/java/com/epam/edu/spring/core/template/SpringEducationSkeletonApplicationTests.java b/src/test/java/com/epam/edu/spring/core/template/SpringEducationSkeletonApplicationTests.java deleted file mode 100644 index 128e270..0000000 --- a/src/test/java/com/epam/edu/spring/core/template/SpringEducationSkeletonApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.epam.edu.spring.core.template; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class SpringEducationSkeletonApplicationTests { - - @Test - public void contextLoads() { - } - -}