Какие дополнительные контрольные примеры могут быть включены в мое модульное тестирование? - PullRequest
0 голосов
/ 16 февраля 2019

С учетом следующей функции RhymeOrNot с содержит три параметра: файл, определенный как строка, первое слово, определенное как строка, и второе слово, определенное как строка.Эта функция возвращает логическое значение, указывающее, рифмуются или нет слова.Слово рифмуется с другим словом, если последний гласный и каждое слово после совпадают.Оба слова должны быть в файле, содержащем словарь слова и их произношение.Если ни слова, ни файла, вернуть false.

Пример файла выглядит примерно так:

PHOTOGRAPH  F OW1 T AH0 G R AE2 F
STAFF  S T AE1 F

Вот модульный тест в Python для проверки функции

class TestRhyme(object):
    def Test(self):
        assert RhymeOrNot("dictionary.txt", "CAT", "HAT") == True
        assert RhymeOrNot("dictionary.txt", "PHOTOGRAPH", "STAFF") == True
        assert RhymeOrNot("dictionary.txt", "TRAIN", "SUSTAIN") == True
        assert RhymeOrNot("dictionary.txt", "GIRL", "BOY") == False
        assert RhymeOrNot("dictionary.txt", "START", "HEART") == True
        assert RhymeOrNot("dictionary.txt", "BERRY", "BUILD") == False
        assert RhymeOrNot("dictionary.txt", "CLASS", "PASS") == True

Обновлено:

class TestRhyme(object):
    def Test(self):
        assert RhymeOrNot("dictionary.txt", "CAT", "HAT") == True
        assert RhymeOrNot("dictionary.txt", "PHOTOGRAPH", "STAFF") == True
        assert RhymeOrNot("dictionary.txt", "TRAIN", "SUSTAIN") == True
        assert RhymeOrNot("dictionary.txt", "GIRL", "BOY") == False
        assert RhymeOrNot("dictionary.txt", "START", "HEART") == True
        assert RhymeOrNot("dictionary.txt", "BERRY", "BUILD") == False
        assert RhymeOrNot("dictionary.txt", "CLASS", "PASS") == True
        assert RhymeOrNot("dictionary.txt", "", "") == False
        assert RhymeOrNot("dictionary.txt", "", "HAPPY") == False
        assert RhymeOrNot("dictionary.txt", "HARRYPOTTER", "BTW") == False
        assert RhymeOrNot("dictionary.txt", "AIRPLANE", "") == False
        assert RhymeOrNot("dictionary.txt", "ABCDE", "FGHJI") == False
        assert RhymeOrNot("dictionary.txt", "air", "") == False
        assert RhymeOrNot("dictionary.txt", "", "sofa") == False
        assert RhymeOrNot("dictionary.txt", "train", "fly") == False
        assert RhymeOrNot("dictionary.txt", "chair", "declare") == True
        assert RhymeOrNot("dictionary.txt", "slam", "ham") == True
        assert RhymeOrNot("dictionary.txt", "StAiR", "PaIr") == True
        assert RhymeOrNot("dictionary.txt", "pen", "hen") == True
        assert RhymeOrNot("", "pen", "hen") == FileNotFoundError
        assert RhymeOrNot("def", "pen", "hen") == FileNotFoundError

Какие еще дополнительные тестовые примеры я могу включить в мое модульное тестирование?Я хочу протестировать все возможные тестовые примеры, которые следуют за функцией RhymeOrNot.

1 Ответ

0 голосов
/ 16 февраля 2019

Это все тесты «счастливого пути».Все они тестируют, когда обработка нормальная.Вам нужно проверить, что происходит, когда что-то идет не так.Все они должны выдавать значимые исключения, чтобы позволить пользователю знать, что происходит.Мусор, ошибка.

Слова ...

  • Что происходит с пустой строкой?
  • Что если слова нет в словаре?(и дайте понять, что вы это тестируете)
  • Что если есть Unicode?
  • Что если они не заглавные?
  • Что, если они не являются строками?
  • Какие хитрые комбинации?Как должны AE0 и AE1 рифма?(и дайте понять, что это то, что вы тестируете)
  • Что если слова совпадают?(тестирует, возможно, неработающую оптимизацию)
  • Что если есть пробелы?
  • Что, если есть не алфавитно-цифровые символы?
  • А как насчет чисел?

Словарь ...

  • Что, если dictionary.txt не может быть открыт?
  • Что если он пуст?
  • Что если он не в ожидаемом формате?

Используйте инструмент анализа покрытия , чтобы проверить, что ваши тесты затрагивают каждую строку кода.Любые пропущенные линии нуждаются в тестировании.

Тестирование - это первый случай, когда многие интерфейсы действительно используются, и это хорошее время для поиска основных проблем интерфейса.Может показаться раздражающим создание нового файла для каждого из этих случаев.Это указывает на то, что RhymeOrNot негибко.Он объединял три отдельных операции: чтение файла, его анализ, проверка рифм.Они должны быть разделены на три части.

Вместо этого вы можете иметь объект RhymingDictionary для хранения проанализированного словаря.Его можно инициализировать различными способами: из файла, из любого потока ввода-вывода, по одному слову за раз и т. Д.Все будут обертки вокруг одного и того же метода парсера.Затем у вас есть отдельный метод rhyme_or_not, который использует инициализированный объект.

Разделение их позволяет вам более тщательно протестировать каждый из трех компонентов: чтение ввода, анализ ввода, проверка рифм.Гибкость упрощает настройку словарей для вас и пользователей.Это повышает производительность как тестов, так и производственного использования, так как нет необходимости анализировать потенциально очень большой словарь каждый раз, когда вы проверяете рифму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...