2015-02-10 7 views
0

Каков самый простой способ ввода набора параметров в класс @Parameterized?JUnit: вводят @ параметрами, параметрируемыми?

использования:

У меня есть регулярный класс, который выглядит, как этот

@RunWith(Parameterized.class) 
class Tests { 

    public void testOne() { } 
    public void testTwo() { } 

    @Parameters 
    public static Collection<Object[]> generateData() { } 

} 

Стандартный JUnit бегун может быть вызван, как это: org.junit.runner.JUnitCore.runClasses (TestClass1. класс, ...);

Однако нет способа указать или переопределить параметры.

Как я могу ввести собственные параметры?

+0

Это похоже [проблема XY] (http://meta.stackexchange.com/questions/66377/что-это-The-ху-проблема). Справедливо ли справедливо сказать, что ваш основной вопрос: ** Как я могу легко запускать только те тесты, которые не удались из большого параметризованного теста? ** Если да, можете ли вы подтвердить, какую IDE вы используете, если вы пытаетесь достичь этого? цель в среде IDE? –

+0

Справедливости ради стоит сказать, что мой основной вопрос: * Хотя можно запустить тестовый класс, используя (например) JUnitCore, как я могу также передать параметры, чтобы он не использовал параметры, заданные в @ Parameters. *? –

+0

Не могли бы вы предоставить более подробную информацию о значении «ввести мои собственные параметры». –

ответ

-1

Я бы использовал метод generateData(), который генерирует все пятьсот элементов. Кроме того, я бы добавил метод getParameters(), аннотированный @Parameters. Он может вызывать generateData(), чтобы получить полную коллекцию, а затем загрузить файл журнала (если есть) и уменьшить коллекцию до параметров тестирования с ошибкой. Если файл журнала отсутствует, он вернет всю коллекцию. Возможно, вам нужно будет явно указать параметры, чтобы их можно было идентифицировать, потому что JUnit не гарантирует повторное выполнение тестов/тестовых параметров в том же порядке (см. Changing names of parameterized tests).

@RunWith(Parameterized.class) 
public class Tests { 

    @Parameters 
    public static Collection<Object[]> getParameters() { 
    List<Object[]> parameters = generateData(); 
    return filterParameters(parameters); 
    } 

    private static Collection<Object[]> filterParameters(Collection<Object[]> params) { 
    // load a file to exclude successful tests 
    // ... 
    } 

    private static Collection<Object[]> generateData() { 
    return new ArrayList<Object[]>(); 
    } 
} 

Другой способ может быть использовать Scanner с System.in в методе @Parameters, так что вы можете выбрать параметры с пользовательского ввода с консоли. Тем не менее, вам нужно будет каким-то образом убедиться, что тесты могут быть запущены без взаимодействия с пользователем, если вы хотите использовать их в непрерывной интеграции.

0

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

  • Если тестовый класс написан «правильно» (например, нет статических ссылок), то вы можете наследовать из тестового класса и предоставить свои собственные параметры. но все же вы должны явно указывать параметры в файле класса, а не во время запуска.
  • вы можете попробовать использовать пользовательский загрузчик классов и генерацию/преобразование байт-кода для изменения метода поставщика параметров при загрузке класса. Точно так же, как PowerMockito работает
  • написать вам собственный бегуна поэтому он будет игнорировать в классе параметры и использовать свой собственный вместо

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

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