Аспектно-ориентированное: как обернуть функцию блоком try cath с помощью аннотации

Всем привет. Может кто подскажет.

Имею функции типа:

public void checkAllDocScroll() throws IOException {
        try {
            checkboxSelectAllScroll.click();
            help.makeScreenshot();
        } catch (Exception e){
            help.makeScreenshot();
            throw e;
        }
    }

Повторяется везде блок try catch, хотел бы вынести это отдельно, не знаю можно ли с помощью аннотаций это сделать:

@ Check
public void checkAllDocScroll() throws IOException {
        checkboxSelectAllScroll.click();
        help.makeScreenshot();
}

А почему не повесить скриншотер просто в листенер OnError и не париться по поводу AOP?

2 Likes

создал свой листенер

package ru.otr.JPort.util;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
import java.io.IOException;
import static ru.otr.JPort.util.ScreenShoter.makeScreenshot;


public class OnFailListener implements ITestListener {
    @Override
    public void onTestStart(ITestResult result) {}

    @Override
    public void onTestSuccess(ITestResult result) {}

    @Override
    public void onTestFailure(ITestResult result) {
        try {
            makeScreenshot("Failure screenshot");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onTestSkipped(ITestResult result) {}

    @Override
    public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
        try {
            makeScreenshot("Failure screenshot");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onStart(ITestContext context) {}

    @Override
    public void onFinish(ITestContext context) {}
}

и класс сриншотер

public class ScreenShoter {

private  ScreenShoter(){};

    @Attachment(value = "{0}", type = "image/png")
    public static byte[] makeScreenshot(String name) throws IOException {
        return ((TakesScreenshot)WebDriverFactory.getDriver(PropertyLoader.loadCapabilities())).getScreenshotAs(OutputType.BYTES);
    }
}

добавляю тестовому классу аннотацию

@Listeners(OnFailListener.class)

Взял отсюда