Как проверить код Python в командной строке - PullRequest
2 голосов
/ 26 декабря 2010

При написании и тестировании метода python я в настоящее время использую следующий подход:

import foo as f
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

Если я изменяю что-то в своем методе и мне нужно повторно протестировать его, я должен выполнить следующее:

f = reload(foo)
bar = f.bar()

bar.runMyMethodAndSeeIfItWorks()

Мне было интересно, есть ли более простой подход к этому

Ответы [ 3 ]

7 голосов
/ 26 декабря 2010

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

1 голос
/ 26 декабря 2010

Вы должны иметь в виду тестирование из оболочки Python [x], где используется reload.В этом случае reload просто отлично - я бы об этом не беспокоился.Вы также можете иметь:

import foomodule

И позже:

reload(foomodule)

[x] Не просто использовать ванильную оболочку (запуск python в командной строке) - скорее попробуйтечто-то вроде IPython или Spyder.

0 голосов
/ 26 декабря 2010

Вы должны посмотреть на Doctests . Это очень простой способ научиться тестированию. По сути, вы пишете свои тесты в интерактивном интерпретаторе, а затем можете копировать / вставлять их в строки документации своих функций. Пример (из документации по Python)

def factorial(n):
"""Return the factorial of n, an exact integer >= 0.

If the result is small enough to fit in an int, return an int.
Else return a long.

>>> [factorial(n) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> [factorial(long(n)) for n in range(6)]
[1, 1, 2, 6, 24, 120]
>>> factorial(30)
265252859812191058636308480000000L
>>> factorial(30L)
265252859812191058636308480000000L
>>> factorial(-1)
Traceback (most recent call last):
    ...
ValueError: n must be >= 0

Factorials of floats are OK, but the float must be an exact integer:
>>> factorial(30.1)
Traceback (most recent call last):
    ...
ValueError: n must be exact integer
>>> factorial(30.0)
265252859812191058636308480000000L

It must also not be ridiculously large:
>>> factorial(1e100)
Traceback (most recent call last):
    ...
OverflowError: n too large
"""
<do stuff>


if __name__ == "__main__":
import doctest
doctest.testmod()

tldr; Перед строкой кода, которую вы хотите протестировать, вы ставите '>>>', а ожидаемый результат - в строке под ней. Это еще не все, но этого должно быть достаточно, чтобы вы начали.

...