2016-10-28 5 views
1

Примечание: код для MyTest обновлен, чтобы отразить найденный вами ответ, вызванный множеством реализаций assertEquals(), доступных в экосистеме JUnit ,JUnit, похоже, не ссылается на мои переопределенные методы тестирования TestWatcher/удаленные методы

Я видел аналогичный вопрос на языке C, но ответа нет. Я либо сделал левый поворот в реализации, либо пропустил что-то простое. Итак ...

Я бы ожидал увидеть «ЭТО НЕИСПРАВНО» и «ЭТО ПРОШЕЛ» на консоли, но без радости. Просто вывод «testFailure()» и «testSuccess()».

TestRunner осущ

import junit.runner.Version; // added to support version check 
import org.junit.runner.JUnitCore; 

public class TestRunner { 
    public static void main(String[] args) { 
     System.out.println(Version.id()); // added to check JUnit version 
     JUnitCore.runClasses(MyTest.class); 
    } 
} 

Тестовые IMPL

// NO LONGER NEDED (v3 -v- v4) import junit.framework.TestCase; 
import org.junit.Rule; 
import org.junit.Test; 
import ort.junit.Assert.assertEquals; // version that invokes TestWatcher 

// public class MyTest extends TestCase { // JUnit v3.X semantics 
public class MyTest {      // JUnit v4.X semantics 

    @Rule 
    public MyTestWatcher myTestWatcher = new MyTestWatcher(); 

    @Test 
    public void testFailure() { 
     System.out.println("testFailure()"); 
     assertEquals("failure", true, false); 
    } 

    @Test 
    public void testSuccess() { 
     System.out.println("testSuccess()"); 
     assertEquals("failure", true, true); 
    } 
} 

TestWatcher осущ

import org.junit.rules.TestWatcher; 
import org.junit.runner.Description; 

public class MyTestWatcher extends TestWatcher { 

    public MyTestWatcher() {} 

    @Override 
    protected void failed(Throwable e, Description description) { 
     System.out.println("IT FAILED"); 
    } 

    @Override 
    protected void succeeded(Description description) { 
     System.out.println("IT PASSED"); 
    } 
} 
+0

Вы не используете «TestWatcher» в соответствии с Javadoc: http://junit.org/junit4/javadoc/4.12/org/junit/rules/TestWatcher.html – Tunaki

+0

Я просто копирую и вставляю и все работает нормально Вот. Попробуйте очистить файлы jar olds и перестроить все. – Paulo

+0

«Вы не правильно используете TestWatcher в соответствии с Javadoc ...», кажется, 180-й из «Я просто копирую и вставляю, и все отлично работает ...». Но, по крайней мере, теперь я знаю, что код должен давать ожидаемые результаты и может сфокусироваться на моей среде, как на самом коде. – SoCal

ответ

1

Основной причиной является обратная совместимость между JUnit V3.x и JUnit версии 4.x. Это хорошо, но это привело к интересной перегрузке утверждений утверждения.

В моем исходном коде вызывается метод org.junit.framework.TestCase.assertEquals(). Однако эта версия assertEquals(), похоже, не вызывает TestWatcher.failed() и TestWatcher.succeeded(). Таким образом, хотя код «успешно работал», он не выводил требуемую информацию о регистрации (т. Е. «IT FAILED»/«IT PASSED»).

Решение заключалось в том, чтобы убедиться, что инструкции assert ссылаются на правильную реализацию (то есть на org.junit.Assert). Самый простой способ сделать это - изменить тест, чтобы он соответствовал семантике v4.X (т. Е. Не расширять TestCase), а затем добавить правильный оператор импорта.

С этими изменениями в MyTest все работает так, как ожидалось. Я обновил свое оригинальное сообщение, чтобы показать, где были внесены изменения.

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