Как запустить несколько тестовых случаев Python в цикле?
Я новичок в Python и пытаюсь сделать то, что я часто делаю в Ruby. А именно, итерация по набору индексов, использование их в качестве аргумента для функции и сравнение ее результатов с массивом выходов fixture.
поэтому я написал это, как обычно в Ruby, но это привело только к одному тестовому случаю.
def test_output(self):
for i in range(1,11):
....
self.assertEqual(fn(i),output[i])
Я пытаюсь получить тест для каждого элемента в диапазоне. Как я могу это сделать?
4 ответов
используя unittest, вы можете показать разницу между двумя последовательностями в одном тестовом примере.
seq1 = range(1, 11)
seq2 = (fn(j) for j in seq1)
assertSequenceEqual(seq1, seq2)
Если это недостаточно гибко, используя unittest, можно создать несколько тестов, но это немного сложно.
def fn(i): ...
output = ...
class TestSequence(unittest.TestCase):
pass
for i in range(1,11):
testmethodname = 'test_fn_{0}'.format(i)
testmethod = lambda self: self.assertEqual(fn(i), output[i])
setattr(TestSequence, testmethodname, testmethod)
нос делает выше легче через генераторы.
import nose.tools
def test_fn():
for i in range(1, 11):
yield nose.tools.assert_equals, output[i], fn(i)
похожие вопросы:
в мире python два самых популярных варианта написания тестов:
в pytest вы параметризовать тесты очень легко:
@pytest.mark.parametrize(('param1', 'param2'),[
(1, 'go'),
(2, 'do not go')])
def test_me(param1, param2):
# write test
это произведет хороший выход также во время выполнения тестов:
go.py:2: test_me[1-go] PASSED
go.py:2: test_me[2-do not go] PASSED
Я использую pytest в течение двух лет, и это очень хороший инструмент. У вас там много возможностей. Кроме параметризации есть светильники также, очень очень приятно утверждения (вам не нужно писать assertEqual, просто assert a==b
и pytest может генерировать очень хороший и полезный результат для него.)
начиная с python 3.4, вы можете сделать это следующим образом:
def test_output(self):
for i in range(1,11):
with self.subTest(i=i):
....
self.assertEqual(fn(i),output[i])
Если ваш вопрос касается, когда вы решаете проблему на конкурентных местах, таких как hackerrank или где-либо еще. Если они не предоставили свою среду для запуска тестовых случаев в цикле.
и локально, если вы используете код для компилятора python, это было бы полезно.
вы можете просто использовать цикл while или функцию диапазона python.
Эл.г:
t = int(input("Enter Number of testcases"))
type(t)
while(t!=0):
n = int(input("Enter number of data"))
type(n)
// Code logic or function Call
t = t-1