Есть ли способ получить 100% покрытие филиала? - PullRequest
0 голосов
/ 11 апреля 2019

Моя задача - покрыть все решение тестами и достичь 100% охвата ветвлений и последовательностей.

У меня есть этот метод с оператором if:

public string ConvertToOrder(string cartCode)
{  
    var cart = CartService.GetCartByCode(cartCode);
    if (cart == null || cart.ItemCount == 0)
    {
        throw new Exception("CartCode does not exist");
    }
}

Мне удалось проверить только 3 сценария из 4.
1. когда cart не null, а itemCount == 0
2. когда cart не null, а itemCount != 0
3. когда cart равно null и itemCount == 0
Сценарий 4.Forth недопустим, так как я не могу добавить элемент к null объекту в моем тесте.

Существует ли какой-либо инструмент, который поддерживает такие случаи и покажет 100% охват? или какой-нибудь способ охватить 4-й сценарий?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

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

1 голос
/ 11 апреля 2019

Четвертого сценария здесь нет. Следующие три сценария обеспечат полное покрытие вашего кода:

  1. cart не null, а itemCount == 0
  2. cart не null, а itemCount != 0
  3. cart является null

C # (как и многие языки программирования) будет оценивать первый операнд cart == null и, если это так, не оценивать второй операнд. Просто это потому, что когда первый операнд истинен, мы знаем, что ответ верен. См. документацию от Microsoft, которая описывает это поведение оператора ||.

Ваш вопрос подразумевает, что инструмент говорит вам, что у вас нет 100% покрытия в первых трех сценариях. Если это так, то стоит посмотреть, почему этот инструмент не считает, что у вас 100% охват.

...