Меняя имена параметризованных тестов

Существует ли способ определить мои собственные имена тестового сценария, когда использование параметризовало тесты в JUnit4?

Я хотел бы изменить значение по умолчанию — [Test class].runTest[n] — к чему-то значимому.

194
задан Pops 27 August 2012 в 08:51
поделиться

4 ответа

Смотря на JUnit 4.5, его бегун ясно не поддерживает это, поскольку та логика прокладывается под землей в частном классе в Параметризованном классе. Вы не могли использовать JUnit Параметризованный бегун и создать Ваше собственное вместо этого, которое поймет понятие имен (который приводит к вопросу того, как Вы могли бы определить имя...).

С точки зрения JUnit, было бы хорошо, если вместо (или в дополнение к) просто передача инкремента, они передадут разграниченные аргументы запятой. TestNG делает это. Если функция важна для Вас, можно прокомментировать список рассылки Yahoo, на который ссылаются по www.junit.org.

37
ответ дан Roy Tinker 23 November 2019 в 05:25
поделиться

Вы можете создать такой метод, как

@Test
public void name() {
    Assert.assertEquals("", inboundFileName);
}

. Хотя я бы не стал использовать его постоянно, было бы полезно выяснить, какой именно тест номер 143.

2
ответ дан 23 November 2019 в 05:25
поделиться

Здесь вы идете:

program CallDotNetFromDelphiWin32;

{$APPTYPE CONSOLE}

uses
  Variants, JclDotNet, mscorlib_TLB, SysUtils;

var
  Host: TJclClrHost;
  Obj: OleVariant;
begin
  try
    Host := TJclClrHost.Create;
    Host.Start;
    WriteLn('CLRVersion = ' + Host.CorVersion);

    Obj := Host.DefaultAppDomain.CreateInstance('DelphiNET', 'DelphiNET.NETAdder').UnWrap;
    WriteLn('2 + 3 = ' + IntToStr(Obj.Add3(2)));

    Host.Stop;
  except
    on E: Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

Примечание: Предполагает, что тип DelphiNET.NETAdder и метод Add3 в DelphiNet.dll - ComVisible . Спасибо Роберту .

Обновление :

При использовании отражения не требуется атрибут ComVisible. Следующий пример работает даже без ComVisible.

Assm := Host.DefaultAppDomain.Load_2('NetAddr');
T := Assm.GetType_2('DelphiNET.NETAdder');
Obj := T.InvokeMember_3('ctor', BindingFlags_CreateInstance, nil, null, nil);
Params := VarArrayOf([2]);
WriteLn('2 + 3 = ' + IntToStr(T.InvokeMember_3('Add3', BindingFlags_InvokeMethod, nil, Obj, PSafeArray(VarArrayAsPSafeArray(Params)))));
-121--2271311-

Это работает для меня:

<Style TargetType="{x:Type Custom:DataGridColumnHeader}">
   <Style.Triggers>
      <Trigger Property="IsMouseOver" Value="True">
          <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip), RelativeSource={RelativeSource Self}}"/>
      </Trigger>
   </Style.Triggers>
</Style>
-121--2754276-

Недавно я столкнулся с той же проблемой при использовании JUnit 4.3.1. Я внедрил новый класс, который расширяет Parameterized под названием LabingParameterized. Он был испытан с использованием JUnit 4.3.1, 4.4 и 4.5. Он восстанавливает экземпляр Description, используя строковое представление первого аргумента каждого массива параметров из метода @ Parameters. Вы можете увидеть код для этого по адресу:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../LabelledParameterized.java?r=3789

и пример его использования по адресу:

http://code.google.com/p/migen/source/browse/trunk/java/src/.../ServerBuilderTest.java?r=3789

Описание теста хорошо форматируется в Eclipse, что я хотел, так как это делает неудачные тесты намного легче найти! Я, вероятно, буду дополнительно уточнять и документировать занятия в течение следующих нескольких дней/недель. Удалите часть URL-адресов «»? «», если требуется очистить край.: -)

Для его использования необходимо только скопировать этот класс (GPL v3) и изменить @ RunWith (Parameterized.class) на @ RunWith (LabingParameterized.class), допустив, что первым элементом списка параметров является senized.class.

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


Примечание: существует некоторое отражение jiggery-pokery так, что он проходит через различные версии JUnit, как указано выше. Версию специально для JUnit 4,3,1 можно найти здесь и, для JUnit 4,4 и 4,5, здесь .

20
ответ дан 23 November 2019 в 05:25
поделиться

Я даю широкое использование статического импорта для Assert и друзей, поэтому для меня легко переопределить утверждение:

private <T> void assertThat(final T actual, final Matcher<T> expected) {
    Assert.assertThat(editThisToDisplaySomethingForYourDatum, actual, expected);
}

, например, вы можете добавить поле «Имя» в свой тестовый класс, инициализированный в конструкторе, и Показать, что на провал теста. Просто передайте его в качестве первых элементов вашего массива параметров для каждого теста. Это также помогает маркировать данные:

public ExampleTest(final String testLabel, final int one, final int two) {
    this.testLabel = testLabel;
    // ...
}

@Parameters
public static Collection<Object[]> data() {
    return asList(new Object[][]{
        {"first test", 3, 4},
        {"second test", 5, 6}
    });
}
2
ответ дан 23 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

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