В следующем примере показано, как можно использовать (постоянные) свойства класса в качестве значений, используемых с атрибутом Range
из NUnit.
const int LO_LIM = 1;
const int HI_LIM = 10;
[Test]
public void assertConstantsCorrect()
{
//Will fail if constants change during development!
Assert.AreEqual(MyClass.LOWER_LIMIT,LO_LIM);
Assert.AreEqual(MyClass.UPPER_LIMIT,HI_LIM);
}
[Test]
public void sometest([Range(LO_LIM,HI_LIM)] int var)
{
//Do test
}
Первым шагом является определение констант в вашем тестовом классе, поскольку атрибут Range
работает только с константами. Эти константы принимают те же значения, что и константы, определенные в свойствах вашего класса.
Второй - это тест, созданный для проверки их соответствия. Если в более позднюю дату и время константы в MyClass
изменятся, сбой в этом тесте уведомит вас об этом изменении. Обратите внимание, что если этот тест не пройден, любой другой тест, использующий эти константы, может считаться недействительным, поскольку он основывается на ложных предположениях!
Lasty - ваши фактические тесты, которые используют эти значения в предложении [Range( start, end)]
.
В качестве альтернативы, вы также можете использовать атрибут [TestFixtureSetUp]
вместо атрибута [Test]
для метода assertConstantsCorrect()
, чтобы все тесты в приборе не выполнялись в случае сбоя assertConstantsCorrect()
.
Еще одна альтернатива состоит в том, чтобы заставить пользовательский атрибут работать для определенных методов, которые вы, как программист, комментируете, и делать эти методы ошибочными, когда assertConstantsCorrect()
терпит неудачу.