четверг, 15 января 2015 г.

Java Annotations

Java Annotations

Что т давно ничего не писал,решил написать какую нить простую,но возможно полезную штуку.Нередко бывает так,что наши автотесты падают,потому что обнаружили баг,но он или не приоритетный,или его пока никто не правит,и этот тест от прогона к прогону падает оставляя билд красным.Все так и должно быть,но ваши ручные тестировщики жутко паникуют от этого и могут каждый раз перепроверять причину падения таких тестов,что отнимает их "драгоценное" время.

Так давайте как то выделим такие тесты в отчете и при падении известных нам тестов в сьюте будем выводить ссылку на баг.

Все вроде как просто и делается так же просто.
Делаем простенькую аннотацию

 
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IsKnownBug {
    public String getBugUrl();

    public String getBugDescription() default "";
}

Теперь нам нужно ее отслеживать,можно это сделать кучей способов и вот один из них


 
   @Override
    public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
            if (method.getTestMethod().getMethod().getAnnotation(IsKnownBug.class) != null && testResult.getStatus() == ITestResult.FAILURE) {
                makeScreenshot(testResult.getName());
                IsKnownBug clazz = testResult.getMethod().getMethod().getAnnotation(IsKnownBug.class);
                Assert.fail(clazz.getBugUrl() + " " + clazz.getBugDescription());
            }
            }
        }

Сам тест помеченный аннотацией будет выглядеть как то так:


 
  @IsKnownBug(getBugUrl = "http://jira.test.ru/browse/TEST-7583", getBugDescription = "IMORTANT BUG")
    @Test(description = "check elements with online after filter on the main page")
    public void checkElementsWithOnlineAfterFilter(Class page) {
    }

Ну и в отчете это будет выглядеть как то так


Вот и все.Всем спасибо.