от
Я хотел бы проверить функцию с кортежем из набора вариантов бахромой и нормальных значений. Например, при тестировании функция, которая возвращает
true
когда дано три длины, которые образуют действительный треугольник, я бы конкретные случаи, негативные / малых / больших чисел, значения, близкие к быв потоплен, и т. д.; более того, главной целью является генерирование сочетаний этих величин, с или без повторений, для того, чтобы получить набор тестовых данных.
(inf,0,


Как примечание: Я на самом деле знаю ответ на этот вопрос, но он может оказаться полезным для людей, и проблемы для людей здесь! - будет пост отвечу позже.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

6 Ответы

0 голосов
от
Я хотел бы проверить функцию с кортежем из набора вариантов бахромой и нормальных значений. Например, при тестировании функция, которая возвращает
true
когда дано три длины, которые образуют действительный треугольник, я бы конкретные случаи, негативные / малых / больших чисел, значения, близкие к быв потоплен, и т. д.; более того, главной целью является генерирование сочетаний этих величин, с или без повторений, для того, чтобы получить набор тестовых данных.
(inf,0,


Как примечание: Я на самом деле знаю ответ на этот вопрос, но он может оказаться полезным для людей, и проблемы для людей здесь! - будет пост отвечу позже.
0 голосов
от
Абсолютно, особенно дело с большим количеством этих перестановок/сочетаний я могу определенно видеть, что первый проход будет проблемой. Интересная реализация в Python, хотя я написал хороший человек В С и данные, используемые на основе "алгоритма 515" (см. ниже). Он написал его на языке Fortran, как это было распространенным явлением для всех "алгоритм ХХ" документы, ну, что сборка или C. Мне пришлось переписать его и сделать некоторые небольшие улучшения для работы с массивами не диапазоны чисел. Это делает случайный доступ, я все еще работаю над некоторыми хорошими реализации указанных кнута в 4-м выпуске Тома 2. Я объяснение, как это работает для читателя. Хотя если кому-то интересно, я не против писать что-нибудь.
/** [combination c n p x]
 * get the [x]th lexicographically ordered set of [p] elements in [n]
 * output is in [c], and should be sizeof(int)*[p] */
void combination(int* c,int n,int p, int x){
    int i,r,k = 0;
    for(i=0;i
0 голосов
от
С совершенно новым для Python 2.6, у вас есть стандартное решение с модуль itertools, что возвращает декартово произведение итераторы :
import itertools

print list(itertools.product([1,2,3], [4,5,6]))
   [(1, 4), (1, 5), (1, 6),
   (2, 4), (2, 5), (2, 6),
   (3, 4), (3, 5), (3, 6)]
Вы можете предоставить "повторение аргумента", чтобы проанализировать продукт с Iterable и сам:
print list(itertools.product([1,2], repeat=3))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2),
(2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]
Вы также можете настроить что-то с комбинациями, а также :
print list(itertools.combinations('123', 2))
[('1', '2'), ('1', '3'), ('2', '3')]
И если порядок имеет значение, бывают и казусы :
print list(itertools.permutations([1,2,3,4], 2))
[(1, 2), (1, 3), (1, 4),
   (2, 1), (2, 3), (2, 4),
   (3, 1), (3, 2), (3, 4),
   (4, 1), (4, 2), (4, 3)]
Конечно, все те штуки, точно не то же самое, но вы можете использовать их в так или иначе, чтобы решить вам проблемы. Просто помните, что вы можете преобразовать кортеж или список в набор, и наоборот, используя список(), кортеж() и set().
0 голосов
от
Интересный вопрос! Я бы сделал это, выбирая комбинации, что-то вроде следующего в Python. Самая трудная часть, вероятно, сначала пройдите верификацию, т. е.
if f(1,2,3) returns true
, это правильный результат? После того как вы проверили, что тогда это является хорошей основой для регрессионного тестирования. Наверное, это хорошая идея, чтобы сделать набор тестов, которые вы знаете, будет все правда (например 3,4,5 в данном случае треугольник), и набор тестовых случаев, которые вы знаете, будет все ложные (например, 0,1,инф). Затем вы можете легко проверить тесты являются правильными. # xpermutations от http://code.activestate.com/recipes/190465 из xpermutations импорт * длины=[-1,0,1,5,10,0,1000,'инф'] для C в xselections(длины,3): # или xuniqueselections печать с (-1,-1,-1); -1,0 (-1,); (-1,-1,1); (-1,-1,5); (-1,-1,10); -1,0 (-1,); (-1,-1,1000); (-1,-1,инф); (-1,0,-1); (-1,0,0); ...
0 голосов
от
Я думаю, что вы можете сделать это с помощью атрибутов тестовой строки (доступен в MbUnit и более поздних версиях Нанит), где можно указать несколько наборов, чтобы заполнить один unit-тест.
0 голосов
от
Хотя это можно создать много тестовых данных и посмотреть, что происходит, это более эффективно, чтобы попытаться свести к минимуму используемых данных. От типичной точки зрения ОК, вы хотели определить разные классификации затрат. Производим набор входных значений для каждой классификации и определения соответствующих мероприятий. Вот пример из классов входных значений действительные треугольники с небольшими числами (например, 1 млрд., 2 млрд., 2 млрд.) действительные треугольники с большими числами, например (0.000001, 0.00002, 0.00003) действует треугольников, которые почти'flat, такие как (10, 10, 19.9999) действительный острых треугольников, которые являются "почти" плоской, такой как (10, 10, 0000001) неверный треугольников с, по меньшей мере, одно отрицательное значение недействительным треугольников, где сумма двух сторон равна третьей неверный треугольников, где сумма двух сторон больше третьей входных значений, которые являются нечисловыми ... Как только вы удовлетворяетесь с перечнем входного классификаций для этой функции, то вы можете создать фактические данные испытаний. Вероятно, было бы полезно проверить все перестановки каждой вещи. (например,(2,3,4), (2,4,3), (3,2,4), (3,4,2), (4,2,3), (4,3,2)) как правило, вы найдете там несколько классификаций, которые вы пропустили (например, понятие inf-файл в качестве входного параметра). Случайные данные за некоторый промежуток времени может быть полезно, как хорошо, что можно найти непонятные баги в коде, но это вообще не продуктивно. Скорее всего, эта функция используется в некоторых специфических условиях, когда применяются дополнительные правила.(например, только целые значения или значения должны быть в 0.01 шагом и т. д.) Эти добавить в список классификаций входных параметров.
...