Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions lesson6/src/ru/sms/lesson6/ForTesting.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package ru.sms.lesson6;

import ru.sms.lesson6.annotations.AfterSuite;
import ru.sms.lesson6.annotations.BeforeSuite;
import ru.sms.lesson6.annotations.Test;

public class ForTesting {
@BeforeSuite
public void beforeClass(){
System.out.println("before class");
}
@Test(Test.Priority.NORMAL)
public void test1(){
System.out.println("test1");
}
@Test(Test.Priority.LOWEST)
public void test2(){
System.out.println("test2");
}
@Test(Test.Priority.LOW)
public void test3(){
System.out.println("test3");
}
@Test(Test.Priority.HIGHEST)
public void test4(){
System.out.println("test4");
}
@Test(Test.Priority.HIGH)
public void test5(){
System.out.println("test5");
}
@Test(Test.Priority.NORMAL)
public void test6(){
System.out.println("test6");
}
@Test(Test.Priority.NORMAL)
public void test7(){
System.out.println("test7");
}
@AfterSuite
public void afterClass(){
System.out.println("after class");
}

}
18 changes: 18 additions & 0 deletions lesson6/src/ru/sms/lesson6/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
Создать класс, который может выполнять «тесты». В качестве тестов выступают классы с наборами методов с аннотациями @Test.
Для этого у него должен быть статический метод start(), которому в качестве параметра передается или объект типа Class, или имя класса.
Из «класса-теста» вначале должен быть запущен метод с аннотацией @BeforeSuite, если такой имеется. Далее запущены методы с аннотациями @Test,
а по завершении всех тестов – метод с аннотацией @AfterSuite. К каждому тесту необходимо добавить приоритеты (int числа от 1 до 10),
в соответствии с которыми будет выбираться порядок их выполнения. Если приоритет одинаковый, то порядок не имеет значения.
Методы с аннотациями @BeforeSuite и @AfterSuite должны присутствовать в единственном экземпляре, иначе необходимо бросить RuntimeException при запуске «тестирования».
*/

package ru.sms.lesson6;

import java.lang.reflect.InvocationTargetException;

public class Main {
public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
Tester.start(ForTesting.class);
}
}
48 changes: 48 additions & 0 deletions lesson6/src/ru/sms/lesson6/Tester.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package ru.sms.lesson6;

import ru.sms.lesson6.annotations.AfterSuite;
import ru.sms.lesson6.annotations.BeforeSuite;
import ru.sms.lesson6.annotations.Test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
import java.util.stream.Collectors;

class Tester {
static void start(Class clazz) throws InvocationTargetException, IllegalAccessException {
final List<Method> methods = Arrays.asList(clazz.getMethods());
final List<Method> setBeforeSuite = methods.stream()
.filter(method -> method.getAnnotation(BeforeSuite.class) != null)
.collect(Collectors.toList());
if (setBeforeSuite.size() > 1)
throw new RuntimeException("BeforeSuite annotation must be in one exemplar");
if (setBeforeSuite.size() > 0){
final Method method = setBeforeSuite.get(0);
method.invoke(new ForTesting());
}

final Set<Method> setTest = methods.stream()
.filter(method -> method.getAnnotation(Test.class) != null)
.collect(Collectors.toSet());
Map<Method, Test.Priority> methodPriorityMap = new HashMap<>();
while (setTest.iterator().hasNext()) {
final Method method = setTest.iterator().next();
final Test.Priority priority = method.getAnnotation(Test.class).value();
methodPriorityMap.put(method, priority);
}
//TODO: Отсортировать мапу и выполнить все методы.

final Set<Method> setAfterSuite = methods.stream()
.filter(method -> method.getAnnotation(AfterSuite.class) != null)
.collect(Collectors.toSet());
if (setAfterSuite.size() > 1) {
throw new RuntimeException("AfterSuite annotation must be in one exemplar");
}
else if (setAfterSuite.iterator().hasNext()) {
setAfterSuite.iterator().next().invoke(new ForTesting());
}


}
}
11 changes: 11 additions & 0 deletions lesson6/src/ru/sms/lesson6/annotations/AfterSuite.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.sms.lesson6.annotations;

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 AfterSuite {
}
11 changes: 11 additions & 0 deletions lesson6/src/ru/sms/lesson6/annotations/BeforeSuite.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.sms.lesson6.annotations;

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 BeforeSuite {
}
31 changes: 31 additions & 0 deletions lesson6/src/ru/sms/lesson6/annotations/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ru.sms.lesson6.annotations;

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 {
Priority value();

enum Priority {
LOWEST(1),
LOW(2),
THREE(3),
FOUR(4),
NORMAL(5),
SIX(6),
SEVEN(7),
EIGHT(8),
HIGH(9),
HIGHEST(10);
private int priorityValue;


Priority(int priorityValue) {
this.priorityValue = priorityValue;
}
}
}