У меня есть следующие пользовательские ограничения NUnit. Это будет (когда будет выполнено правильно) тест - это заданный DateTime
равен завтра.Общие аргументы не применяются
public class TomorrowConstraint : Constraint
{
public TomorrowConstraint()
{
Description = "Tomorrow";
}
public override ConstraintResult ApplyTo<DateTime>(DateTime actual)
{
return new ConstraintResult(this, actual, true);
}
}
Обратите внимание, что я дал параметр Type конкретный тип, а не общий тип.
Испытание ниже использует его:
[TestFixture]
public class X
{
[Test]
public void Foo()
{
Assert.That("string", new TomorrowConstraint());
}
}
Я передаю в string
, неDateTime
, однако строка передается методу без каких-либо проблем.
Если я смотрю на тип с actual.GetType()
, я вижу, что это строка: {Name = "String" FullName = "System.String"}
.
Как это происходит?
Я предположил, что я получаю исключение где-то по пути?
Вы не сдерживающий TYPEOF '' actual' к DateTime', вы просто именование общий параметр 'ApplyTo'' DateTime'. Это будет работать так же, если вы назовете это 'T'. Если вы попытаетесь получить доступ к любым членам 'DateTime' в' actual' (помимо тех, которые определены 'object'), вы получите ошибку типа. – Lee