2012-02-17 2 views
2

Для модульного теста я хочу использовать Range attribute от NUnit для тестирования входных данных для функции в диапазоне. Нижний и верхний пределы этого диапазона кодируются в постоянные свойства класса (Singleton pattern). Я хотел бы указать начальную точку и конечную точку Range attribute со свойствами класса, что-то вроде этого:Использование констант класса для атрибута [Диапазон]

[Test] 
public void sometest([Range(MyClass.LOWER_LIMIT,MyClass.UPPER_LIMIT)] int var) 
{ 
    //Do something and assertive with the nice variable 
} 

Однако этот подход не работает. Хотя из самой документации неясно, кажется, что Range attribute должны быть предоставлены постоянные переменные. Хотя мои константы класса являются статическими свойствами, только определяемыми только, они фиксируют постоянную переменную.

Я отправил и отвечу на этот вопрос, но действительно ли это способ установить параметры диапазона на основе константы класса в NUnit? Или есть более элегантное решение?

ответ

2

В следующем примере показано, как можно использовать (константные) свойства из класса в качестве значений, используемых с атрибутом 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() терпит неудачу.

Смежные вопросы