Как проводить модульное тестирование и чем оно отличается от интеграционного тестирования в таких фреймворках, как Django и fastapi?
Допустим, у меня есть приложение Fastapi следующего вида (этот код взят из документации):
app = FastAPI()
@app.get("/foo")
async def read_main():
return {"msg": "Hello World"}
Я считаю, что существует два способа проверки этого представления. Первый - с помощью клиентского объекта. Например:
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"msg": "Hello World"}
Однако я думаю, что это не модульный тест. Это больше похоже на интеграционный тест. Потому что на самом деле мы также запускаем коды fastapi. Второй вариант, который, на мой взгляд, ближе к определению юнит-теста, - это запустить функцию напрямую:
def test_read_main():
response = read_main()
assert response == {"msg": "Hello World"}
В Django мы можем напрямую вызывать функцию представления или использовать объект клиента. Мой первый вопрос - какой вариант лучше?
Допустим, мы выбрали один из них, и теперь, чтобы предотвратить обращение к базе данных, я подражал базе данных. Теперь я хочу протестировать представление, которое просто проверяет, существует ли что-то в базе данных. Мой второй вопрос заключается в том, какой смысл тестировать такое представление? Потому что после того, как мы поиздевались над базой данных, мы знаем, что произойдет при вызове базы данных с заданными аргументами.