Как решить тестовые сценарии для модульных тестов?

Если вы напечатаете значения ad2$Cost.x>=ad2$lower & ad2$Cost.x<=ad2$upper, вы можете увидеть более одного логического условия в результате. Это потому, что в R все операции векторизованы.

Пример:

> cc =c(T,F)
> if (cc) print(cc)
[1]  TRUE FALSE
Warning message:
In if (cc) print(cc) :
  the condition has length > 1 and only the first element will be used

Поэтому используйте все или любую функцию, подобную этой:

> if (all(cc)) print(cc) #If all conditions are true
> if (any(cc)) print(cc)
[1]  TRUE FALSE
11
задан Rich Bradshaw 20 November 2008 в 19:55
поделиться

8 ответов

Вы хотели бы проверить пограничные случаи. Насколько большой простое число является Вашим методом, который, как предполагают, смог обработать? Это будет зависеть, на каком представлении (тип) Вы использовали. Если Вы только интересуетесь маленьким (действительно относительное понятие при использовании в теории чисел) начала, Вы, вероятно, используете интервал или долго. Протестируйте горстку самые большие начала, Вы можете в представлении, которое Вы выбрали. Удостоверьтесь, что Вы проверяете некоторые непростые числа также. (Их намного легче проверить независимо.)

Естественно, Вы также захотите протестировать несколько небольших чисел (начала и неначала) и некоторые посреди диапазона. Горстка каждый должен быть много. Также удостоверьтесь, что Вы выдаете исключение (или возвратите код ошибки, какой бы ни Ваше предпочтение) для чисел, которые являются вне диапазона Ваших допустимых исходных данных.

9
ответ дан 3 December 2019 в 05:14
поделиться

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

10
ответ дан 3 December 2019 в 05:14
поделиться

в целом протестируйте столько случаев, сколько необходимо чувствовать себя удобными/уверенными

также в целом протестируйте основной/нулевой случай, максимальный случай и по крайней мере один средний/средний случай

также протестируйте случаи ожидаемого исключения, если применимо

если Вы не уверены в своем главном алгоритме, то любой ценой тестируют его с первыми 1 000 начал или так, для завоевывания доверия

1
ответ дан 3 December 2019 в 05:14
поделиться

"Остерегайтесь ошибок. Я доказал вышеупомянутый корректный алгоритм, но еще не протестировал его".

Некоторые люди не понимают вышеупомянутую кавычку (пересказ?), но это имеет смысл, когда Вы думаете об этом. Тесты никогда не будут доказывать корректный алгоритм, они только помогают указать, кодировали ли Вы его право. Могли бы появиться тесты записи на ошибки, которые Вы ожидаете, и чтобы граничные условия достигли хорошего покрытия кода. Только будьте значениями выбора внезапно, чтобы видеть, работают ли они, потому что это могло бы привести к большому количеству тестов который весь тест точно то же самое.

Для Вашего примера, просто ручной выбор несколько начал и неначал для тестирования особых условий в реализации.

1
ответ дан 3 December 2019 в 05:14
поделиться

Спросите себя. Что ТОЧНО делает я хочу протестировать. И протестируйте самое важное. Тест для проверки это в основном делает то, что Вы ожидаете, что это сделает в ожидаемых случаях.

При тестировании всех тех пустых указателей и пограничных случаев - я - не думаю, является реальным, слишком трудоемким, и кто-то должен поддержать это позже! И... Ваш тестовый код должен быть достаточно простым так, чтобы Вы не должны были тестировать свой тестовый код!

Если Вы хотите проверить, что Ваша функция правильно применила алгоритм, и работы в целом - вероятно, будут достаточно некоторые начала.

Если Вы хотите, доказывают, что метод для нахождения начал КОРРЕКТЕН - 100 000 начал не будут достаточно :) Но Вы не хотите тестировать последнего (вероятно)...

Только Вы знаете то, что Вы хотите протестировать!:)

PS я thnik, который использование циклов в модульных тестах не всегда неправильно, но я думал бы дважды прежде, чем сделать это. Тестовый код должен быть ОЧЕНЬ простым. Что, если что-то идет не так, как надо и существует ошибка в Вашем тесте????:) Однако необходимо стараться избегать дублирования тестового кода как регулярного дублирования кода. Кто-то должен поддержать тестовый код.

ЛЮДИ ПРОКОММЕНТИРУЙТЕ, ПОЧЕМУ ВЫ ДУМАЕТЕ, ЧТО ЭТО СТОИЛО ДВА DOWNVOTES :)

1
ответ дан 3 December 2019 в 05:14
поделиться

Несколько вопросов, ответы могут сообщить Вашему решению:

  • Как важный корректное функционирует этого кода?
  • Реализация этого кода, вероятно, чтобы быть измененной в будущем? (если так, протестируйте больше для поддержки будущего изменения),
  • Государственный контракт этого кода, вероятно, для изменения в будущем? (если так, протестируйте менее - для сокращения суммы одноразового тестового кода),
  • Как покрытие кода, все ответвления, посещаются?
  • Даже если код не переходит, граничные соображения тестируются?
  • Тестовый прогон быстро?

Править: Хм, так для уведомления в определенном сценарии. Так как Вы начали писать модульные тесты вчера, у Вас не могло бы быть опыта решить среди всех этих факторов. Позвольте мне помочь Вам:

  • Этот код, вероятно, не слишком важен (никто не умирает, никто не идет на войну, никому не предъявляют иск), таким образом, поверхностное знание тестов будет прекрасно.
  • Реализация, вероятно, не изменится (методы простого числа известны), таким образом, нам не нужны тесты для поддержки этого. Если реализация действительно изменяется, это происходит, вероятно, из-за наблюдаемого провального значения. Это может быть добавлено как новый тест во время изменения.
  • Государственный контракт этого не изменится.
  • Получите 100%-е покрытие кода на этом. Нет никакой причины написать код, который тест не посещает при этом обстоятельстве. Необходимо смочь сделать это с небольшим количеством тестов.
  • Если Вы заботитесь о том, что делает код, когда нуль называют, протестируйте это.
  • Небольшое количество тестов должно работать быстро. Это позволит им часто выполняться (и разработчиками и автоматизацией).

Я протестировал бы 1, 2, 3, 21, 23, "большое" начало (5 цифр), "большое" неначало и 0, если Вы заботитесь о том, что это делает с 0.

0
ответ дан 3 December 2019 в 05:14
поделиться

Чтобы быть действительно уверенными, Вы оказываетесь перед необходимостью тестировать их всех.:-)

Серьезно, хотя, для этого вида функции Вы, вероятно, используете установленный и проверенный алгоритм. Главное, которое необходимо сделать, проверяют, что код правильно реализует алгоритм.

Другая вещь состоит в том, чтобы удостовериться, что Вы понимаете пределы своего представления числа, независимо от того, что это. По крайней мере это поместит верхний предел размера число, которое можно протестировать. Например, при использовании 32-разрядного неподписанного интервала Вы никогда не собираетесь быть способными протестировать значения, больше, чем 4G. Возможно Ваш предел будет ниже, чем это, в зависимости от деталей Вашей реализации.

Так же, как пример чего-то, что могло пойти не так, как надо с реализацией: простой алгоритм для тестирования начал должен попытаться делить кандидата на все известные начала до квадратного корня кандидата. Функция квадратного корня не обязательно даст точный результат, так для сейфа необходимо пойти немного мимо этого. Как далеко мимо зависел бы от конкретно, как функция квадратного корня реализована и насколько это могло быть выключено.

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

Кроме того, рассмотрите, как Вы собираетесь "генерировать" свой список начал для тестирования. Можно ли положить что список, чтобы быть корректными? Как те числа были протестированы, и кого?

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

0
ответ дан 3 December 2019 в 05:14
поделиться

"Если это стоит создать, это стоит протестировать"
"Если это не стоит тестировать, почему Вы тратите впустую свое время, работая над ним?"

Я предполагаю, что Вы не подписывались для тестирования сначала, где Вы пишете тест перед написанием кода?
Для не волнения я уверен, что Вы не являетесь одними.
Как был сказан выше, протестируйте края, великолепное место для запуска. Также должен протестировать тяжелые случаи, если Вы только тестируете то, что Вы знаете работы, можно быть уверены, что тяжелый случай произойдет в производстве в худшее время.

О, и "я только что нашел последнюю ошибку" - HA HA.

0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: