2015-09-16 5 views
0

Я использую Pex для анализа выполнения функций. Однако я заметил, что параметры по умолчанию не просматриваются.Pex игнорирует назначение параметров по умолчанию

Вот пример того, что я имею в виду:

public int bla(int x = 2) 
{ 
    return x * 2; 
} 

Когда я запускаю PEX, он генерирует тестовый пример для int result = bla(0);. (x = 0)
Есть ли способ сообщить Pex, что он также должен попытаться позвонить bla( без параметра (т. Е. int result = bla())?

ответ

1

1-е правило IntelliTest/Pex - это попытка увеличить покрытие кода. Если все заявления были покрыты, Pex остановится.

Существует много способов добавить код, который распространяется только при x = 2, например, в методе тестирования. Это может быть самым простым, что работает для меня:

[PexMethod] 
    public int bla([PexAssumeUnderTest]Class1 target, int x) 
    { 
     if(x == 2) 
     { 
      PexAssert.ReachEventually(); 
     } 
     int result = target.bla(x); 
     return result; 
     // TODO: add assertions to method Class1Test.bla(Class1, Int32) 
    } 

Окно результаты исследования должны показать:

x  result 
    0  0 
    2  4 

Я не знаю ни одного способа, чтобы иметь Pex автоматически генерировать тестовые случаи для всех параметров по умолчанию ,

В коде производства в реальном времени очень вероятно, что значение по умолчанию будет использоваться в коде, чтобы часто не возникало проблема с этой проблемой.

И если у вас есть все пути кода, на которые распространяется Pex, действительно ли имеет значение, используется ли значение по умолчанию или нет?

Это, вероятно, больше импорта, чтобы протестировать методы, которые вызывают «бла», и без доставки значения.

+0

Вы правы, но это не имеет значения, однако я могу думать о сценариях, где это может иметь значение (изменения кода, постоянные изменения, плохое программирование и т. Д.). ReachEventually() кажется хорошим решением, чтобы поймать это – stklik

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

  • Нет связанных вопросов^_^