Вообще говоря, вы тестируете функцию, вызывая ее с аргументами и проверяя, соответствует ли возвращаемое значение ожидаемому. Это означает, что вы должны заранее знать , как вы ожидаете, что ваша функция будет вести себя.
Вот тест для простой функции add
:
def add(a, b):
return a + b
def test_add_function():
a = 1
b = 2
assert add(a, b) == 3 # we KNOW that adding 1 + 2 must equal 3
Если вы вызываете test_add_function
и AssertionError
не поднято, поздравляю! Ваш тест пройден.
Конечно, тестирование усложняется, если у вас нет «чистых» функций, а есть объекты, которые работают с общими данными, например, классы. Тем не менее логика c в основном такая же: вызовите функцию и проверьте, действительно ли происходит ожидаемый результат :
class MyClass:
def __init__(self, a):
self.a = a
def add_one_to_a(self):
self.a += 1
def test_method_add_one_to_a():
initial_a = 1
instance = MyClass(a=1)
assert instance.a == initial_a # we expect this to be 1
instance.add_one_to_a() # instance.a is now 2
assert instance.a == initial_a + 1 # we expect this to be 2
Я предлагаю прочитать / посмотреть некоторые учебные пособия по Python Модуль unittest
для того, чтобы вымочить ноги, особенно для привыкания к классу unittest.TestCase
, который очень помогает в обычных тестовых операциях, таких как процедуры установки / разрыва (которые позволяют, например, "refre sh" ваш экземпляр Simulator
между тестами), тестирование, если возникает ошибка, когда функция вызывается с неправильными аргументами, и т. д. c.
Конечно, существуют и другие стратегии, когда более сложный, чем этот (как они часто бывают), например насмешливые объекты , который в основном позволяет вам проверять любой объект / функцию, вызываемый или изменяемый другим объектом / функцией, проверять, вызывался ли он, какие аргументы использовались, и т. д.
Если тестирование ваших функций все еще слишком сложное, это, вероятно, означает, что ваш код недостаточно модульный, или что ваш функционал Они пытаются выполнять слишком много вещей одновременно.