2010-10-22 4 views
0

Добрый вечерлучше тестового покрытия JUnit необходимо

Предположим, что ваш код имеет следующее заявление:

if (string ends with char 'y') { 
    if ((char before last is not 'e') || (char before last is not 'a')) { 
    return (something awesome); 
    } 
} 

Так что достаточно просто я думал ...

Test1: вход = «ху "(последний символ - y, символ до последнего не является e или a)

Результат - покрытие ...

Какие еще тесты мне не хватает? Если бы это было и & & вместо ||, я полагаю, тест будет намного проще, но || немного смутил меня.

Можете ли вы предложить Test2,3, n?

Спасибо

ответ

2

Вы хотите проверить ожидаемое поведение с входами «ey» и «ay».

Вы можете обнаружить, что ваш метод не совсем то, что вы думаете. Я думаю, || действительно немного смутил вас.

2

Вы также можете написать тесты, чтобы убедиться, что вы не вернете что-то удивительное

Test2: input = "ez" does not return something awesome 
Test3: input = "af" does not return something awesome 

Испытания должны доказать ваше поведение, предназначенное. Как насчет различных длин строк?

(empty, '1', '2 ', '3 ') 

Возможно, вы захотите превратить это в метод или функцию и назвать его чем-то подходящим. Затем напишите тесты для этого простого метода (в TDD вы должны сначала написать их).

1

Там в различные типы покрытия:

  • покрытия уровня Метод (то, что C++ компиляторов, используемые, чтобы сделать)
  • покрытие уровня
  • Line
  • Символ покрытия уровня (большинство инструментов # покрытия C обеспечивают это)
  • Охват уровня филиалов (многие инструменты обеспечения охвата Java предоставляют это)

Я думаю, что ваше замешательство придет i n, чтобы играть, потому что вы думаете с точки зрения покрытия символа, пока ваш инструмент дает вам охват филиалов. Вот различие:

Покрытие символа будет определять, достигли ли вы каждого символа (например, куча кода до символа ';'). Нижняя строка содержит два символа:

int i = 0; int j = 3;

Охват филиалов измеряет каждое условие как в истинных, так и в ложных значениях. В вашем примере у вас было 4 различных условия, каждый из которых имеет истинную ветвь и ложную ветвь.Для того, чтобы полностью проверить каждую ветвь, вам нужно испытание для каждого из следующих условий:

  • строки заканчивается полукокс у, голец позапрошлома является электронной
  • строки заканчивается полукокс у, символ позапрошлома является
  • строка заканчивается полукокс у, гольца позапрошлома не является ни, ни электронной
  • строки не заканчивается полукокс у

с кодом, который вы написали, вы, вероятно, испытать что-то неожиданное. Вы получите something_awesome независимо от того, если строка заканчивается на y. Если строка заканчивается на «ey», то она не заканчивается на «ay». Если любое из этих условий истинно, вы получаете что-то потрясающее. Напишите тесты и убедитесь сами.

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