Как покрыть исключения в Visual Studio Coverage - PullRequest
3 голосов
/ 19 июля 2010

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

Мой первый вопрос: возможно ли это / возможно?

Мой второй, более конкретный вопрос, у меня есть следующий метод:

/// <summary>
/// Clears frames, control groups, display groups
/// </summary>
public bool Clear()
{
    try
    {
        this.Frames.Clear();
        this.ControlGroups.Clear();
        this.DisplayGroups.Clear();
        return true;
    }
    catch (Exception ex)
    {
        Milltown.MTCore.mtException mtEx = new Milltown.MTCore.mtException((int)PFExceptions.Exception_Hidden_FuctionLevel, ex,
        PFCommonVariables.ApplicationPlatform, PFCommonVariables.ApplicationDataSource, "PFSystem:Clear");
        return false;
    }

}

Мой юнит-тест для этого метода:

//System Clear Test
Assert.IsTrue(MySystem.Clear());
Assert.AreEqual(0,MySystem.Frames.Count);
Assert.AreEqual(0,MySystem.ControlGroups.Count);
Assert.AreEqual(0, MySystem.DisplayGroups.Count);

Покрытие кода показывает, что я покрываю строки внутри блока try, но не блок catch. Как я могу покрыть код в блоках catch?

Ответы [ 2 ]

2 голосов
/ 19 июля 2010

Это возможно, это возможно.Это также очень трудно выполнить, и не все уверены, что выгоды перевешивают затраты.

В отношении достижения вашей конкретной цели - посмотрите на ExpectedExceptionAttribute и в своемпроверить настройку объектов для выдачи этих исключений.

2 голосов
/ 19 июля 2010

Улучшение вашего покрытия - хорошая цель.Не зацикливайтесь на 100% числе: оно может быть очень обманчивым.Больше охвата лучше, чем меньше, но даже при 100% вы можете упустить многие аспекты своего кода (примеры см. http://nedbatchelder.com/blog/200710/flaws_in_coverage_measurement.html в Python).И последние 5% покрытия, возможно, не скажут вам столько, сколько вы хотели бы.

Что касается ваших исключений, вам понадобится способ вызвать исключение из одного из ваших методов.Обычный способ сделать это - смоделировать реализацию, чтобы вы могли решить, что подобъекты действительно будут делать во время теста, не привязываясь к конкретной реализации.

...