2012-01-12 5 views
1

В этом небольшом куске кода:Почему покрытие ветвей NCover составляет 50%, хотя ветвь оценивает как истинные, так и ложные?

public event StabilityChangedHandler StabilityChanged; 

267 private void RaiseStabilityChanged() 
     { 
      if (StabilityChanged != null) 
      { 
    1   StabilityChanged(); 
      } 
275 } 

NCover сообщает только 50% охват филиального для этого метода. Тем не менее, я знаю, что я вызываю RaiseStabilityChanged() с и без обработчиков, подключенных к StabilityChangedEvent. Слева я помещал количество хитов, сообщенное NCover.

Почему NCover может отчитываться о 50% вместо 100%?

+1

В качестве побочного элемента обычно реализуются события, чтобы подписка/отмена подписки была потокобезопасной. Поэтому вы должны скопировать 'StabilityChanged' в локальную переменную, а затем проверить и вызвать эту переменную. – CodesInChaos

ответ

0

Похоже, что ни один тест не выполняется, когда StabilityChanged == null. Вероятно, это не важный тест для запуска, но он получит ваше покрытие до 100%.

+0

Они сказали, что он был запущен, когда не было обработчика, что означало бы, что он был нулевым. –

+0

Если бы это было правдой, это было бы 100% -ным охватом кода ... попробуйте установить условные точки останова в инструкции if для StabilityChanged == null и посмотреть, попадет ли он во время выполнения теста. – therealmitchconnors

+0

что-то не так с этими точками попадания, потому что нет способа, чтобы конечная скобка для метода попадала чаще, чем сама декларация метода ... что-то здесь неудобно ... – therealmitchconnors