Вы можете преобразовать обе строки в значение 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 |
+-------------------------+-------------------------+
Смотря на JUnit 4.5, его бегун ясно не поддерживает это, поскольку та логика прокладывается под землей в частном классе в Параметризованном классе. Вы не могли использовать JUnit Параметризованный бегун и создать Ваше собственное вместо этого, которое поймет понятие имен (который приводит к вопросу того, как Вы могли бы определить имя...).
С точки зрения JUnit, было бы хорошо, если вместо (или в дополнение к) просто передача инкремента, они передадут разграниченные аргументы запятой. TestNG делает это. Если функция важна для Вас, можно прокомментировать список рассылки Yahoo, на который ссылаются по www.junit.org.
Вы можете создать такой метод, как
@Test
public void name() {
Assert.assertEquals("", inboundFileName);
}
. Хотя я бы не стал использовать его постоянно, было бы полезно выяснить, какой именно тест номер 143.
Здесь вы идете:
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, здесь .
Я даю широкое использование статического импорта для 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}
});
}
Используя Параметризованный
в качестве модели, я написал свой собственный тестовый прогон / набор - всего за полчаса. Он немного отличается от 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);
}
}