Первое, что я должен сказать - рефакторинг! Разбейте его на несколько операторов if, которые будет легче проверить, изменить логику и выйти раньше. Трудно дать более подробные предложения, не видя фактического кода и контекста.
Другое дело, если (b == 3000700)
, то &&(b>=30 && b<=33)
возвращает false, что делает эту часть утверждения ||(b==3000700)
бессмысленной. Может быть, это должно было быть (a == 3000700)
?
Что касается тестовых случаев... Опять же, не видя полного фрагмента кода и не зная контекста, немного сложно давать содержательные предложения. Но я все равно попробую.
Давайте посмотрим на «критические значения» для каждой переменной.
- Переменная a:
3000710
, любая другая
- Переменная б:
3000700, [30, 33], any
other
- Переменная с:
1, [4, 6], any other
- Переменная v:
1.0.9, 2.0.0, any other
Используя теорию тестирования (эквивалентное разбиение и анализ граничных значений), мы можем ограничить приведенный выше список «критических» значений.
[30, 33] => 30, 31, 33 (The value outside of this range is already covered by "any other")
[4, 6] => 4, 5, 6 (The value outside of this range is already covered by "any other". Though we did't really change anything in this case)
У Nunit есть атрибут [Combinatorial]
, который генерирует тестовые примеры для всех возможных комбинаций отдельных элементов данных, предоставленных для параметров теста.
*Сделаны предположения: переменные a, b, c
имеют тип int, переменная v
является строкой
Код будет выглядеть примерно так:
[Test, Combinatorial]
public void FirstTest(
[Values(3000710, 0)] int a,
[Values(30, 31, 33, 3000700, 0)] int b,
[Values(1, 4, 5, 6, 0)] int c,
[Values("1.0.9", "2.0.0", "")] string v)
{
RunTestMethod(a, b, c, v);
}
Вам просто нужно сохранить сгенерированные тестовые данные при выполнении теста
person
buxter
schedule
10.07.2017