JUnit + Java + ErrorCollector проблема

У меня возникли проблемы с ErrorCollectors в Java.

У меня есть код, который сравнивает два значения. Если значения совпадают, результатом является пропуск. Если значения не совпадают, произойдет сбой. Звучит просто. Итак, я создал базовый контрольный пример:

public class CB_Test {


    @Rule
    public ErrorCollector collector = new ErrorCollector();

    @Before
    public void setUp() {
        //steps = new WebDriverSteps(new FirefoxDriver());
        //steps = new WebDriverSteps();
    }

    @Test
    public void testme() {
        String checkMe;
        String value;

        checkMe = "1234";
        value   = "2234";

        System.out.println("value coming in : " + value);
        System.out.println("value to check  : " + checkMe);
        collector.checkThat("Check values match", value, is(checkMe));

    }
}

Который ведет себя именно так, как я хотел. Однако я хотел затем сделать этот код способным вызываться из других мест. Итак, я создал свой "основной" файл так:

public class ABC_Test {

    @Before
    public void setUp() {
        //steps = new WebDriverSteps(new FirefoxDriver());
        //steps = new WebDriverSteps();
    }

    @Test
    public void check() {
        CheckVal dv = new CheckVal();

        try {
            dv.checkTable("4234");
        } catch (AssertionError er) {
            System.out.println("22");
        } catch (Exception e) {
            System.out.println("23");
        } catch (Throwable t) {
            System.out.println("24");
        }

    }

}

И переместил код для проверки:

public class CheckVal {

    @Rule
    public ErrorCollector collector = new ErrorCollector();

    public void checkTable(String value) {

        String checkMe;

        checkMe = "1234";

        System.out.println("value coming in : " + value);
        System.out.println("value to check  : " + checkMe);
        collector.checkThat("Check values match", value, is(checkMe));

    }

}

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

1 ответ

Решение

@Rule не содержится в тестируемом классе, который запускается тестовым исполнителем и обрабатывает все аннотации. Ваш код на данный момент является просто кодом.

Вам нужно изменить свой код, чтобы переместить @Rule в тестируемый класс, поэтому аннотация обрабатывается:

import org.junit.*;
import org.junit.rules.ErrorCollector;

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

    @Before
    public void setUp() {
       //steps = new WebDriverSteps(new FirefoxDriver());
       //steps = new WebDriverSteps();
    }

   @Test
   public void check() {
      CheckVal dv = new CheckVal(collector);

      try {
          dv.checkTable("4234");
      } catch (AssertionError er) {
        System.out.println("22");
      } catch (Exception e) {
        System.out.println("23");
      } catch (Throwable t) {
        System.out.println("24");
      }
  }

}

Затем измените повторно используемый класс, чтобы принять ErrorCollector и обработать как обычно:

import org.junit.*;
import org.junit.rules.ErrorCollector;
import org.hamcrest.CoreMatchers;

public class CheckVal {

public ErrorCollector collector = null;

public CheckVal(ErrorCollector collector) {
    this.collector = collector;
}

public void checkTable(String value) {

    String checkMe;

    checkMe = "1234";

    System.out.println("value coming in : " + value);
    System.out.println("value to check  : " + checkMe);
    collector.checkThat("Check values match", value, CoreMatchers.is(checkMe));

}

}

IntelliJ (или ваш тестовый участник) затем сообщает об ошибке, как и ожидалось:

java.lang.AssertionError: Check values match
Expected: is "1234"
    but: was "4234"
Другие вопросы по тегам