JUnit: Включите утверждения в классе под тестом

John Resig Processing.js является хорошей платформой для этого.

27
задан Chris Conway 25 November 2009 в 16:10
поделиться

4 ответа

Как сказал мой друг ... зачем тратить время на написание утверждения, если вы просто собираетесь его выключить?

Учитывая эту логику, все утверждают операторы должны выглядеть так:

if(!(....))
{
    // or some other appropriate RuntimeException subclass
    throw new IllegalArgumentException("........."); 
}

Чтобы ответить на ваш вопрос так, как вы, вероятно, захотите: -)

import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;


@RunWith(Suite.class)
@Suite.SuiteClasses({
        FooTest.class,
        BarTest.class
        })
public class TestSuite
{
    @BeforeClass
    public static void oneTimeSetUp()
    {
        ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
    }
}

Затем запустите набор тестов, а не каждый тест. Это должно (работает в моем тестировании, но я не читал внутреннюю структуру кода JUnit) привести к тому, что статус утверждения будет установлен до загрузки любого из тестовых классов.

1
ответ дан 28 November 2019 в 05:41
поделиться

В качестве альтернативы вы можете скомпилировать свой код так, чтобы утверждения не могли быть отключены. В Java 6 вы можете использовать «fa.jar - принудительная проверка утверждения, даже если он не включен» , мой небольшой взлом.

4
ответ дан 28 November 2019 в 05:41
поделиться

Я предлагаю три возможных (простых?) Исправления, которые сработают для меня после быстрого теста (но вы можете необходимо проверить побочные эффекты использования блока статического инициализатора)

1.) Добавьте блок статического инициализатора к тем тестам, которые полагаются на включенные утверждения

import ....
public class TestXX....
...
    static {
        ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
    }
   ...
   @Test(expected=AssertionError.class)
   ...
...

2. ) Создайте базовый класс, который расширяют все ваши тестовые классы, требующие включения утверждений

public class AssertionBaseTest {
    static {
        //static block gets inherited too
        ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
    }
}

3.) Создайте набор тестов, который запускает все ваши тесты

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
    //list of comma-separated classes
    /*Foo.class,
    Bar.class*/
})
public class AssertionTestSuite {
    static {
        //should run before the test classes are loaded
        ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);
    }
    public static void main(String args[]) {
        org.junit.runner.JUnitCore.main("AssertionTestSuite");
    }
}
5
ответ дан 28 November 2019 в 05:41
поделиться

В Eclipse вы можете перейти в Windows Настройки Java JUnit , в который можно добавить -ea каждый раз, когда создается новая конфигурация запуска. Он также добавляет параметр -ea в конфигурацию отладки.

Полный текст рядом с флажком:

Добавить '-ea' к аргументам ВМ при создании нового запуска JUnit конфигурация

21
ответ дан 28 November 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: