JUnit ErrorCollector @Rule с пример

При нормален сценарий, всеки път, когато идентифицирате някаква грешка по време на изпълнение на теста, ще спрете теста, ще коригирате грешката и ще стартирате отново теста.

Но JUnit има малко по-различен подход. с JUnit колектор на грешки, можете да продължите с изпълнението на теста дори след като бъде открит проблем или тестът е неуспешен. Колекторът на грешки събира всички обекти за грешки и ги докладва само веднъж след приключване на изпълнението на теста.

Защо да използвате Error Collector?

Докато пишете тестов скрипт, вие искате да изпълните всички тестове, дори ако някой ред от код се провали поради повреда на мрежата, повреда на твърдението или друга причина. В тази ситуация все още можете да продължите да изпълнявате тестов скрипт, като използвате специална функция, предоставена от JUnit известен като „колектор на грешки“.

За това, JUnit употреби @Rule анотация който се използва за създаване на обект за събиране на грешки. След като обектът за събиране на грешки е създаден, можете лесно да добавите всички грешки в обекта с помощта на метод addError (възможна грешка). Както знаете, това Хвърлимо е супер класа на изключение намлява грешка клас в Java. Когато добавите грешки по този начин, тези грешки ще бъдат регистрирани JUnit резултат от теста.

Предимството на добавянето на всички грешки в Error Collector е, че можете да проверите всички грешки наведнъж. Освен това, ако скриптът се провали по средата, той все още може да продължи да го изпълнява

Забележка: В случай на използване на просто assert или try/catch блок, използването на метода за събиране на грешки няма да е възможно.

Примерен код

За да разберете повече за Error Collector, вижте примера на код по-долу, който демонстрира как да създадете обект Error Collector и да добавите всички грешки в този обект, за да проследите проблема:

package guru99.junit;		

import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							
    collector.checkThat(getResults(),			
                not(containsString("here is an error")));			
    // all lines of code will execute and at the end a combined failure will		
    be logged in.		
    }		
}	

Какво е @Rule в jUnit?

JUnit осигурява специален вид обработка на тестове, Тестов случай или тестов пакет с помощта на @rule анотация. Използвайки @rule, можете лесно да добавите или предефинирате поведението на теста.

Има няколко вградени правила, предоставени от JUnit API, който може да използва тестер, или дори вие можете да напишете наше собствено правило.

Вижте по-долу ред от код, който показва как да използвате @rule анотация заедно с Error Collector:

@Rule				
public ErrorCollector collector= new ErrorCollector();

Пример за използване на ErrorCollector

За да разберем колектора на грешки, нека създадем клас и правило за събиране на всички грешки. Тук ще добавите всички грешки с помощта на addError(throwable).

Вижте кода по-долу, който просто създава правило, което не е нищо друго освен създаване на „обект за събиране на грешки“. Което допълнително се използва за добавяне на всички грешки, за да се докладва проблемът в края:

ErrorCollectorExample.java

package guru99.junit;		

import org.junit.Assert;		
import org.junit.Rule;		
import org.junit.Test;		
import org.junit.rules.ErrorCollector;		

public class ErrorCollectorExample {				
    @Rule		
    public ErrorCollector collector = new ErrorCollector();							

    @Test		
    public void example() {					
    collector.addError(new Throwable("There is an error in first line"));							
    collector.addError(new Throwable("There is an error in second line"));							

        System.out.println("Hello");					
        try {			
            Assert.assertTrue("A " == "B");					
        } catch (Throwable t) {					
            collector.addError(t);					
        }		
        System.out.println("World!!!!");					
    }		
}		

TestRunner.java

Нека добавим горния тестов клас в тестов инструмент и да го изпълним, за да събере всички грешки. Вижте кода по-долу:

package guru99.junit;		

import org.junit.runner.JUnitCore;		
import org.junit.runner.Result;		
import org.junit.runner.notification.Failure;		

public class TestRunner {				
			public static void main(String[] args) {									
      Result result = JUnitCore.runClasses(ErrorCollectorExample.class);					
			for (Failure failure : result.getFailures()) {							
         System.out.println(failure.toString());					
      }		
      System.out.println("Result=="+result.wasSuccessful());							
   }		
}      

Изход:

Вижте проследяването на грешките, което проследява всички грешки на едно място:

TestRunner.Java Продукция

Предимства на хирургията на JUnit ErrorCollector

Можете да използвате JUnit твърдение за функционално или GUI валидиране, напр

  1. assertEquals(Съобщение за низ, очакван обект, действителен обект), които сравняват, че два обекта са равни.
  2. По подобен начин assertTrue(булево условие) потвърждава, че дадено условие е вярно.

Използвайки assertion, тестът за валидиране става лесен. Но един основен проблем е, че изпълнението на теста ще спре дори ако едно твърдение е неуспешно.

Непрекъснатостта на теста и управлението на възстановяването е от решаващо значение за успеха на автоматизацията на теста. Error Collector е най-добрият начин за справяне с подобни сценарии.

Oбобщение

  • Колекторът на грешки на Junit позволява на теста да продължи дори след като първият проблем е намерен и тестът е неуспешен в края
  • Колекторът за грешки събира всички обекти за грешки и ги докладва само след края на изпълнението на теста
  • Предимството на добавянето на всички грешки в Error Collector е, че можете да проверите всички грешки наведнъж
  • Колекторът на грешки просто добавя грешки с помощта на метода addError(throwable err), предоставен от ErrorCollector.java.