diff --git a/.gradle/6.3/executionHistory/executionHistory.lock b/.gradle/6.3/executionHistory/executionHistory.lock deleted file mode 100644 index a7604be..0000000 Binary files a/.gradle/6.3/executionHistory/executionHistory.lock and /dev/null differ diff --git a/.gradle/6.3/fileChanges/last-build.bin b/.gradle/6.3/fileChanges/last-build.bin deleted file mode 100644 index f76dd23..0000000 Binary files a/.gradle/6.3/fileChanges/last-build.bin and /dev/null differ diff --git a/.gradle/6.3/fileHashes/fileHashes.lock b/.gradle/6.3/fileHashes/fileHashes.lock deleted file mode 100644 index 2b22044..0000000 Binary files a/.gradle/6.3/fileHashes/fileHashes.lock and /dev/null differ diff --git a/.gradle/6.3/gc.properties b/.gradle/6.3/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/6.5/executionHistory/executionHistory.bin b/.gradle/6.5/executionHistory/executionHistory.bin deleted file mode 100644 index ca60313..0000000 Binary files a/.gradle/6.5/executionHistory/executionHistory.bin and /dev/null differ diff --git a/.gradle/6.5/executionHistory/executionHistory.lock b/.gradle/6.5/executionHistory/executionHistory.lock deleted file mode 100644 index 7ae781a..0000000 Binary files a/.gradle/6.5/executionHistory/executionHistory.lock and /dev/null differ diff --git a/.gradle/6.5/fileChanges/last-build.bin b/.gradle/6.5/fileChanges/last-build.bin deleted file mode 100644 index f76dd23..0000000 Binary files a/.gradle/6.5/fileChanges/last-build.bin and /dev/null differ diff --git a/.gradle/6.5/fileHashes/fileHashes.bin b/.gradle/6.5/fileHashes/fileHashes.bin deleted file mode 100644 index adb536e..0000000 Binary files a/.gradle/6.5/fileHashes/fileHashes.bin and /dev/null differ diff --git a/.gradle/6.5/fileHashes/fileHashes.lock b/.gradle/6.5/fileHashes/fileHashes.lock deleted file mode 100644 index b89035b..0000000 Binary files a/.gradle/6.5/fileHashes/fileHashes.lock and /dev/null differ diff --git a/.gradle/6.5/gc.properties b/.gradle/6.5/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 125640c..0000000 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and /dev/null differ diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index b774acd..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Thu Oct 08 23:16:29 MSK 2020 -gradle.version=6.3 diff --git a/.gradle/checksums/checksums.lock b/.gradle/checksums/checksums.lock deleted file mode 100644 index 2cf264e..0000000 Binary files a/.gradle/checksums/checksums.lock and /dev/null differ diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index c8b5c9a..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 87ca0fc..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index fdc392f..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index b0ec460..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index c29a8be..fd73923 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ -# Примеры для курса "Разработчик Java" в OTUS +Написать свой тестовый фреймворк. -Группа 2020-09 +Поддержать свои аннотации @Test, @Before, @After. -### Преподаватели -Сергей Петрелевич
-Стрекалов Павел
-Александр Оруджев
-Вячеслав Лапин
-Виталий Куценко
-Дмитрий Коган +Запускать вызовом статического метода с именем класса с тестами. -Студент: -Kashapov Renat (Кашапов Ренат)
-renat.kashapov@gmail.com \ No newline at end of file +Т.е. надо сделать: + +создать три аннотации - @Test, @Before, @After. +Создать класс-тест, в котором будут методы, отмеченные аннотациями. +Создать "запускалку теста". На вход она должна получать имя класса с тестами, в котором следует найти и запустить методы отмеченные аннотациями и пункта 1. +Алгоритм запуска должен быть следующий:: метод(ы) Before текущий метод Test метод(ы) After для каждой такой "тройки" надо создать СВОЙ объект класса-теста. +Исключение в одном тесте не должно прерывать весь процесс тестирования. +На основании возникших во время тестирования исключений вывести статистику выполнения тестов (сколько прошло успешно, сколько упало, сколько было всего) diff --git a/hw03-testFW/build.gradle b/hw03-testFW/build.gradle new file mode 100644 index 0000000..791b924 --- /dev/null +++ b/hw03-testFW/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'java' + id 'application' +} + +group 'ru.otus' +version '1.0-SNAPSHOT' + +mainClassName = 'ru.otus.TestFW' \ No newline at end of file diff --git a/hw03-testFW/src/main/java/ru/otus/After.java b/hw03-testFW/src/main/java/ru/otus/After.java new file mode 100644 index 0000000..9654aab --- /dev/null +++ b/hw03-testFW/src/main/java/ru/otus/After.java @@ -0,0 +1,11 @@ +package ru.otus; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface After { +} diff --git a/hw03-testFW/src/main/java/ru/otus/Before.java b/hw03-testFW/src/main/java/ru/otus/Before.java new file mode 100644 index 0000000..4b294ac --- /dev/null +++ b/hw03-testFW/src/main/java/ru/otus/Before.java @@ -0,0 +1,11 @@ +package ru.otus; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Before { +} diff --git a/hw03-testFW/src/main/java/ru/otus/Test.java b/hw03-testFW/src/main/java/ru/otus/Test.java new file mode 100644 index 0000000..29e8e5f --- /dev/null +++ b/hw03-testFW/src/main/java/ru/otus/Test.java @@ -0,0 +1,11 @@ +package ru.otus; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Test { +} diff --git a/hw03-testFW/src/main/java/ru/otus/TestFW.java b/hw03-testFW/src/main/java/ru/otus/TestFW.java new file mode 100644 index 0000000..1101900 --- /dev/null +++ b/hw03-testFW/src/main/java/ru/otus/TestFW.java @@ -0,0 +1,62 @@ +package ru.otus; + +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.*; + +public class TestFW { + private static short failedTest; + public static void main(String ... args){ + System.out.println("Hello, Test Framework"); + testStarter(TestedClass.class); + } + static void testStarter(Class clazz) { + Method [] methods = clazz.getDeclaredMethods(); + Map, Set> annotationSetMethod = new HashMap<>(); + annotationSetMethod.put(Before.class, new HashSet<>()); + annotationSetMethod.put(Test.class, new HashSet<>()); + annotationSetMethod.put(After.class, new HashSet<>()); + for(Method method:methods){ + for(Annotation annotation:method.getDeclaredAnnotations()){ + Set methodSet = annotationSetMethod.get(annotation.annotationType()); + if(methodSet!=null){ + methodSet.add(method); + } + } + } + annotationSetMethod.get(Test.class).forEach(methodTest -> { + Object testedObject; + try { + testedObject = clazz.getConstructor().newInstance(); + if (testedObject == null) { + throw new NullPointerException(); + } else { + try { + methodsExecution(annotationSetMethod.get(Before.class), testedObject); + methodTest.invoke(testedObject); + methodsExecution(annotationSetMethod.get(After.class), testedObject); + } catch (Exception e) { + failedTest++; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + }); + System.out.println("Failed tests: " + failedTest); + System.out.println("Passed tests: " + (methods.length-failedTest)); + } + + private static void methodsExecution(Set methodSet, Object testedObject){ + methodSet.forEach(method -> { + try { + method.invoke(testedObject); + } + catch (IllegalAccessException | InvocationTargetException e){ + e.printStackTrace(); + } + }); + } +} diff --git a/hw03-testFW/src/main/java/ru/otus/TestedClass.java b/hw03-testFW/src/main/java/ru/otus/TestedClass.java new file mode 100644 index 0000000..1f558c3 --- /dev/null +++ b/hw03-testFW/src/main/java/ru/otus/TestedClass.java @@ -0,0 +1,31 @@ +package ru.otus; + +public class TestedClass { + + public TestedClass(){} + + @After + public void methodAfter1(){System.out.println("I'm methodAfter1 (this.hashCode(): " + hashCode() + ")");} + + @After + public void methodAfter2(){System.out.println("I'm methodAfter2 (this.hashCode(): " + hashCode() + ")");} + + @Before + public void methodBefore1(){ + System.out.println("I'm methodBefore1 (this.hashCode(): " + hashCode() + ")"); + } + + @Before + public void methodBefore2(){ + System.out.println("I'm methodBefore2 (this.hashCode(): " + hashCode() + ")"); + } + + @Test + public void methodTest1(){ + System.out.println("I'm methodTest1 (this.hashCode(): " + hashCode() + ")"); + throw new ArithmeticException(); + } + + @Test + public void methodTest2() {System.out.println("I'm methodTest2 (this.hachCode(): " + hashCode() + ")");} +} diff --git a/settings.gradle b/settings.gradle index 9a32c0b..67ef2fa 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ rootProject.name = 'otus_hw' - +include 'hw03-testFW' \ No newline at end of file diff --git a/src/main/java/A.java b/src/main/java/A.java deleted file mode 100644 index 6be5562..0000000 --- a/src/main/java/A.java +++ /dev/null @@ -1,5 +0,0 @@ -public class A { - public static void main(String ... args){ - System.out.println("Hello, gradle + git!"); - } -}