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

Вы можете преобразовать обе строки в значение datetime и сложить их вместе, чтобы получить объединенную дату и время, или объединить строки и преобразовать результат.

Обратите внимание, что для правильного разбора времени потребуется добавить два : символа:

select cast(d as datetime) + cast(stuff(stuff(t,5,0,':'),3,0,':') as datetime) as dt1
      ,cast(d + ' ' + stuff(stuff(t,5,0,':'),3,0,':') as datetime) as dt2
from (values('20180402','134259')) as v(d,t);

Вывод

+-------------------------+-------------------------+
|           dt1           |           dt2           |
+-------------------------+-------------------------+
| 2018-04-02 13:42:59.000 | 2018-04-02 13:42:59.000 |
+-------------------------+-------------------------+
194
задан Pops 27 August 2012 в 08:51
поделиться

5 ответов

Смотря на 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
поделиться

Используя Параметризованный в качестве модели, я написал свой собственный тестовый прогон / набор - всего за полчаса. Он немного отличается от darrenp's LabelledParameterized тем, что позволяет указать имя явно, а не полагаться на первый параметр toString () .

Он также не использует массивы, потому что я ненавижу массивы. :)

public class PolySuite extends Suite {

  // //////////////////////////////
  // Public helper interfaces

  /**
   * Annotation for a method which returns a {@link Configuration}
   * to be injected into the test class constructor
   */
  @Retention(RetentionPolicy.RUNTIME)
  @Target(ElementType.METHOD)
  public static @interface Config {
  }

  public static interface Configuration {
    int size();
    Object getTestValue(int index);
    String getTestName(int index);
  }

  // //////////////////////////////
  // Fields

  private final List<Runner> runners;

  // //////////////////////////////
  // Constructor

  /**
   * Only called reflectively. Do not use programmatically.
   * @param c the test class
   * @throws Throwable if something bad happens
   */
  public PolySuite(Class<?> c) throws Throwable {
    super(c, Collections.<Runner>emptyList());
    TestClass testClass = getTestClass();
    Class<?> jTestClass = testClass.getJavaClass();
    Configuration configuration = getConfiguration(testClass);
    List<Runner> runners = new ArrayList<Runner>();
    for (int i = 0, size = configuration.size(); i < size; i++) {
      SingleRunner runner = new SingleRunner(jTestClass, configuration.getTestValue(i), configuration.getTestName(i));
      runners.add(runner);
    }
    this.runners = runners;
  }

  // //////////////////////////////
  // Overrides

  @Override
  protected List<Runner> getChildren() {
    return runners;
  }

  // //////////////////////////////
  // Private

  private Configuration getConfiguration(TestClass testClass) throws Throwable {
    return (Configuration) getConfigMethod(testClass).invokeExplosively(null);
  }

  private FrameworkMethod getConfigMethod(TestClass testClass) {
    List<FrameworkMethod> methods = testClass.getAnnotatedMethods(Config.class);
    if (methods.isEmpty()) {
      throw new IllegalStateException("@" + Config.class.getSimpleName() + " method not found");
    }
    if (methods.size() > 1) {
      throw new IllegalStateException("Too many @" + Config.class.getSimpleName() + " methods");
    }
    FrameworkMethod method = methods.get(0);
    int modifiers = method.getMethod().getModifiers();
    if (!(Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))) {
      throw new IllegalStateException("@" + Config.class.getSimpleName() + " method \"" + method.getName() + "\" must be public static");
    }
    return method;
  }

  // //////////////////////////////
  // Helper classes

  private static class SingleRunner extends BlockJUnit4ClassRunner {

    private final Object testVal;
    private final String testName;

    SingleRunner(Class<?> testClass, Object testVal, String testName) throws InitializationError {
      super(testClass);
      this.testVal = testVal;
      this.testName = testName;
    }

    @Override
    protected Object createTest() throws Exception {
      return getTestClass().getOnlyConstructor().newInstance(testVal);
    }

    @Override
    protected String getName() {
      return testName;
    }

    @Override
    protected String testName(FrameworkMethod method) {
      return testName + ": " + method.getName();
    }

    @Override
    protected void validateConstructor(List<Throwable> errors) {
      validateOnlyOneConstructor(errors);
    }

    @Override
    protected Statement classBlock(RunNotifier notifier) {
      return childrenInvoker(notifier);
    }
  }
}

И пример:

@RunWith(PolySuite.class)
public class PolySuiteExample {

  // //////////////////////////////
  // Fixture

  @Config
  public static Configuration getConfig() {
    return new Configuration() {
      @Override
      public int size() {
        return 10;
      }

      @Override
      public Integer getTestValue(int index) {
        return index * 2;
      }

      @Override
      public String getTestName(int index) {
        return "test" + index;
      }
    };
  }

  // //////////////////////////////
  // Fields

  private final int testVal;

  // //////////////////////////////
  // Constructor

  public PolySuiteExample(int testVal) {
    this.testVal = testVal;
  }

  // //////////////////////////////
  // Test

  @Ignore
  @Test
  public void odd() {
    assertFalse(testVal % 2 == 0);
  }

  @Test
  public void even() {
    assertTrue(testVal % 2 == 0);
  }

}
13
ответ дан 23 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

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