2016-05-13 4 views
2

У меня возникли проблемы с ErrorCollectors в Java.Ошибка JUnit + Java + ErrorCollector

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

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)); 

    } 

} 

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

ответ

2

@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"); 
     } 
    } 

}

Затем измените resusable класса, чтобы принять 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" 
+0

Большое спасибо. Это именно то, что было - и спасибо также за комментарии, объясняющие ответ. Я играл с чем-то похожим – Joseph

 Смежные вопросы

  • Нет связанных вопросов^_^