2014-01-16 5 views
9

Я написал класс теста производительности, обозначенный как @Ignore, потому что для запуска требуется очень много времени, и мне обычно не нужно его запускать. Я хотел бы иметь возможность щелкнуть правой кнопкой мыши по одной из @Test и сказать «запустить», но когда я делаю это в intellij, он не запускает тест, потому что класс помечен как проигнорированный.Могу ли я заставить Intellij-IDEA запустить проигнорированный тест?

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

Можно ли получить эту функциональность в Intellij?

+1

, на мой взгляд, не рекомендуется злоупотреблять @Ignored аннотацией для этого. возможно, сдача теста в отдельный набор, который вы запускаете только тогда, когда вам это нужно, было бы лучше. в конечном итоге (на вашей платформе CI) вы хотите, чтобы тест выполнялся в любом случае, потому что для этого нужны тесты. – kmera

+0

@ k-mera ах это интересная идея. Это потребует гораздо больших усилий, потому что мне нужно будет убедиться, что мой скрипт сборки сконфигурирован, чтобы пропустить его, но я могу спуститься по этому маршруту. –

+0

да, я понимаю проблему. после того, как вы зафиксируете свой код, он должен быть протестирован в любом случае со всеми вашими тестами. но если это занимает много времени локально, это может замедлить развитие. – kmera

ответ

5

Я нашел this link, в котором говорится, что вы можете сделать что-то сложное с Assume.assumeTrue, которое будет отмечать тест как игнорируемый, если условие ложно, и обычно это системное свойство, которое используется в состоянии, поэтому вы можете пройти он в качестве параметра в командной строке. IntelliJ позволяет настраивать параметры командной строки, поэтому он должен работать, но я сам не пробовал.

Пример из ссылки является:

@Test 
public void shouldTryEveryPossiblePhoneticAttributeSet() throws IOException { 
    Assume.assumeTrue(TestEnvironment.hasBigParseSets()); 
    ... 
} 

public class TestEnvironment { 
    private static final String HAS_BIG_PARSESETS = "hasBigParseSets"; 
    public static boolean hasBigParseSets(){ 
     return "true".equalsIgnoreCase(System.getProperty(HAS_BIG_PARSESETS)); 
    } 
} 

И "МВН тест -P bigParseSets" против "МВН тест".

Редактировать: И я только что нашел this neat thread на StackOverflow, который рассказывает, как запускать один тест junit. Я предполагаю, что мне не нужно указывать это, поскольку это сообщение на StackOverflow. Это объясняет, как это сделать из командной строки, но вы должны сделать что-то очень похожее на то, которое имеет жестко закодированные значения для имен классов и методов, а затем просто щелкните правой кнопкой мыши по классу SingleJUnitTestRunner и попросите IntelliJ запустить Это.

+0

Это хороший трюк, но он не работает так, как хотелось бы на Intellij. По какой-то причине 'Assume.assumeTrue (false);' возвращает ошибку вместо игнорирования, [как указано в документации, по умолчанию] (http://junit.sourceforge.net/javadoc/org/junit/Assume .html). –

+0

Что действительно странно в том, что я только что сказал, так это то, что ваша ссылка показывает скриншоты, говорящие иначе. Я заглянул в нее дальше и обнаружил, что это потому, что я использую [junit benchmarks] (http://labs.carrotsearch.com/junit-benchmarks.html). Я предполагаю, что тестовый бегун не обрабатывает 'Assume' так, как вам хотелось бы. –

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