Пересчет условий переключения с enum в SonarQube - PullRequest
3 голосов
/ 31 октября 2019

У меня есть enum с 3 значениями (A, B, C).

Выражение-переключатель используется в методе foo для выполнения некоторых операций в соответствии со значением перечисления.

У меня также естьтестовый случай с различными значениями в качестве параметра для обеспечения охвата всех условий.

Однако результаты на SonarQube показывают ", частично покрытый тестами (3 из 4 условий)."

Мои вопросы:

  1. Почему существуют 4 условия? Я думаю, что должно быть 3 условия. (A, B, C)
  2. Что я должен сделать, чтобы полностью покрыть 4 условия?
public enum FooType
{
    A, B, C
}

public class TestCondition
{
    public int foo (FooType type)
    {
        int ans = 0;

        switch (type) {
            case A:
                ans = 10;
                break;
            case B:
                ans = 20;
                break;
            case C:
                ans = 30;
                break;
        }

        return ans;
    }
}

@Test
public void testFoo ()
{
    TestCondition testCondition = new TestCondition();

    testCondition.foo(FooType.A);
    testCondition.foo(FooType.B);
    testCondition.foo(FooType.C);
}

[ОБНОВЛЕНИЕ]

Попробуйте добавить случай по умолчанию, и результат будет таким же.

Кажется, четвертое условие - это случай default.

  1. Что я должен сделать, чтобы покрыть default case?
  2. Почему SonarQube учитывается в default, поскольку я не добавил default в своем операторе switch?

enter image description here

1 Ответ

0 голосов
/ 31 октября 2019

Почему существуют 4 условия? Я думаю, что должно быть 3 условия. (A, B, C)

Нет, есть 4 ответвлений: A, B, C и другое значение, которое не являетсяA, B, C. Да, мне все равно, что в вашем перечислении есть только 3 константы, мне важно, чтобы в вашем операторе switch было 4 действительных ветки, независимо от того, определите вы default или нет.

Что я должен сделать, чтобы полностью покрыть 4 условия?

Игнорировать предупреждение, оно должно быть избыточным. Если вы хотите получить полное покрытие, вы должны добавить еще 1 случай к вашему тесту. Поскольку вы переключаете перечисление, вам нужно добавить еще одну константу в ваше перечисление. Как: DEFAULT, UNKNOWN и т. Д.

...