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"