--- /dev/null
+from typing import List
+
+import pytest
+from fastapi import FastAPI
+from pydantic import BaseModel, ValidationError
+from starlette.testclient import TestClient
+
+app = FastAPI()
+
+
+class Item(BaseModel):
+ name: str
+ price: float = None
+ owner_ids: List[int] = None
+
+
+@app.get("/items/invalid", response_model=Item)
+def get_invalid():
+ return {"name": "invalid", "price": "foo"}
+
+
+@app.get("/items/innerinvalid", response_model=Item)
+def get_innerinvalid():
+ return {"name": "double invalid", "price": "foo", "owner_ids": ["foo", "bar"]}
+
+
+@app.get("/items/invalidlist", response_model=List[Item])
+def get_invalidlist():
+ return [
+ {"name": "foo"},
+ {"name": "bar", "price": "bar"},
+ {"name": "baz", "price": "baz"},
+ ]
+
+
+client = TestClient(app)
+
+
+def test_invalid():
+ with pytest.raises(ValidationError):
+ client.get("/items/invalid")
+
+
+def test_double_invalid():
+ with pytest.raises(ValidationError):
+ client.get("/items/innerinvalid")
+
+
+def test_invalid_list():
+ with pytest.raises(ValidationError):
+ client.get("/items/invalidlist")