C#, NUnit: действительно ли возможно протестировать это, DateTime очень близок, но не обязательно равен другому?

Чтобы выполнить некоторые из ответов здесь, мне пришлось получить ParametrizedType MyGenericClass, независимо от того, насколько высока иерархия, с помощью рекурсии:

private Class<T> getGenericTypeClass() {
        return (Class<T>) (getParametrizedType(getClass())).getActualTypeArguments()[0];
}

private static ParameterizedType getParametrizedType(Class clazz){
    if(clazz.getSuperclass().equals(MyGenericClass.class)){ // check that we are at the top of the hierarchy
        return (ParameterizedType) clazz.getGenericSuperclass();
    } else {
        return getParametrizedType(clazz.getSuperclass());
    }
}
16
задан Svish 24 November 2009 в 20:45
поделиться

5 ответов

Я не пробовал это, но согласно документам , похоже, это должно работать:

Assert.That(thing.Created, Is.EqualTo(DateTime.Now).Within(1).Minutes);

Я не могу сказать, что обычно я большой поклонник системы ограничений - я фанат Assert.AreEqual - но эта конкретная конструкция довольно аккуратна.

(В качестве принципиального момента я должен отметить, что вам лучше было бы передать какой-нибудь интерфейс «часов» в качестве зависимости, и тогда у вас не будет никакой неточности. Вы можете подделать его для тестов, и использовать системные часы для производства.)

36
ответ дан 30 November 2019 в 16:19
поделиться

Проверьте объект TimeSpan - сравните обе даты, используя TimeSpan, и проверьте, находятся ли значения в пределах вашего порога.

TimeSpan span = thing.Created - DateTime.Now;
if(span.TotalSeconds <= 1)
   [..]
2
ответ дан 30 November 2019 в 16:19
поделиться

Вы бы нужно начать с определения «очень близко». Если под «очень близко» вы подразумеваете несколько сотен тактов, то вы можете сделать это:

Assert.That(200, Is.LessThanOrEqualTo(DateTime.Now.Ticks - thing.Created.Ticks));

Затем, когда у вас есть даты в пределах 200 тактов, ваш тест проходит.

2
ответ дан 30 November 2019 в 16:19
поделиться

Вы всегда можете вычесть переменные DateTime и получить TimeSpan. С Time span вы можете делать все, что хотите.

0
ответ дан 30 November 2019 в 16:19
поделиться

Вы можете проверить, вычесть их и проверить временной интервал.

        DateTime.Now.Subtract(thing.Created).TotalSeconds

Дает вам общее количество секунд.

1
ответ дан 30 November 2019 в 16:19
поделиться
Другие вопросы по тегам:

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