diff --git a/Makefile b/Makefile
index bb8ef75..abdffbc 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,7 @@
+.PHONY: all
+all: format lint mypy coverage
+
+
 .PHONY: test
 test:
 	python setup.py test $(test)
diff --git a/respx/__init__.py b/respx/__init__.py
index df7b555..c084937 100644
--- a/respx/__init__.py
+++ b/respx/__init__.py
@@ -3,7 +3,7 @@ from .mock import HTTPXMock
 __all__ = ["HTTPXMock"]
 
 # Expose mock api
-__httpx_mock = HTTPXMock()
+__httpx_mock = HTTPXMock(assert_all_called=False)
 __api_methods = list(filter(lambda m: not m.startswith("_"), dir(__httpx_mock)))
 __all__.extend(__api_methods)
 globals().update({method: getattr(__httpx_mock, method) for method in __api_methods})
diff --git a/respx/mock.py b/respx/mock.py
index b58b6f2..91d48c0 100644
--- a/respx/mock.py
+++ b/respx/mock.py
@@ -22,11 +22,14 @@ _get_response = BaseClient._get_response  # Pass-through reference
 
 
 class HTTPXMock:
-    def __init__(self):
-        self._patchers = []
-        self._patterns = []
-        self.aliases = {}
-        self.calls = []
+    def __init__(self, assert_all_called: bool = True) -> None:
+        self._assert_all_called = assert_all_called
+        self._patchers: typing.List[asynctest.mock._patch] = []
+        self._patterns: typing.List[RequestPattern] = []
+        self.aliases: typing.Dict[str, RequestPattern] = {}
+        self.calls: typing.List[
+            typing.Tuple[AsyncRequest, typing.Optional[AsyncResponse]]
+        ] = []
 
     def clear(self):
         self._patchers.clear()
@@ -40,6 +43,9 @@ class HTTPXMock:
 
     def __exit__(self, *args: typing.Any) -> None:
         self.stop()
+        if self._assert_all_called:
+            self.assert_all_called()
+        self.clear()
 
     def activate(self, func=None):
         """
@@ -81,7 +87,11 @@ class HTTPXMock:
         while self._patchers:
             patcher = self._patchers.pop()
             patcher.stop()
-        self.clear()
+
+    def assert_all_called(self):
+        assert all(
+            (pattern.called for pattern in self._patterns)
+        ), "not all requests called"
 
     def add(self, pattern: RequestPattern, alias: typing.Optional[str] = None) -> None:
         self._patterns.append(pattern)

Optional assertion that all added patterns was triggered
To be in line with `responses` api, maybe name it the same `assert_all_requests_are_fired`.

Also decide what default for contextmanager use should be, `True` or `False`.

**Example:**
```py
with responsex.HTTPXMock(assert_all_requests_are_fired=False) as m:
    ...
```
diff --git a/tests/test_mock.py b/tests/test_mock.py
index ef34a4c..25250cf 100644
--- a/tests/test_mock.py
+++ b/tests/test_mock.py
@@ -19,15 +19,17 @@ class HTTPXMockTestCase(asynctest.TestCase):
 
         respx.start()
         response = httpx.get(url)
+        self.assertTrue(request.called)
+        self.assertEqual(response.status_code, 202)
+        self.assertEqual(response.text, "")
         self.assertEqual(len(respx.calls), 1)
+
         respx.stop()
+        self.assertEqual(len(respx.calls), 1)
 
+        respx.clear()
         self.assertEqual(len(respx.calls), 0)
 
-        self.assertTrue(request.called)
-        self.assertEqual(response.status_code, 202)
-        self.assertEqual(response.text, "")
-
     @respx.activate
     def test_activate_decorator(self):
         respx.get("https://foo/bar/", status_code=202)
@@ -96,17 +98,17 @@ class HTTPXMockTestCase(asynctest.TestCase):
         self.assertEqual(response.text, "whatever")
 
     def test_invalid_url_pattern(self):
-        with respx.HTTPXMock() as httpx_mock:
-            foobar = httpx_mock.get(["invalid"], content="whatever")
+        with respx.activate():
+            foobar = respx.get(["invalid"], content="whatever")
             with self.assertRaises(ValueError):
                 httpx.get("https://foo/bar/")
 
         self.assertFalse(foobar.called)
 
     def test_unknown_url(self):
-        with respx.HTTPXMock() as httpx_mock:
+        with respx.activate():
             url = "https://foo/bar/"
-            foobar = httpx_mock.post(url)  # Non-matching method
+            foobar = respx.post(url)  # Non-matching method
             response = httpx.get(url)
 
             self.assertFalse(foobar.called)
@@ -116,8 +118,8 @@ class HTTPXMockTestCase(asynctest.TestCase):
             )
             self.assertEqual(response.text, "")
 
-            self.assertEqual(len(httpx_mock.calls), 1)
-            request, response = httpx_mock.calls[-1]
+            self.assertEqual(len(respx.calls), 1)
+            request, response = respx.calls[-1]
             self.assertIsNotNone(request)
             self.assertIsNotNone(response)
 
@@ -278,11 +280,12 @@ class HTTPXMockTestCase(asynctest.TestCase):
         self.assertEqual(response.text, "foobar")
 
     def test_alias(self):
-        with respx.HTTPXMock() as httpx_mock:
+        with respx.activate() as m:
             url = "https://foo/bar/"
-            foobar = httpx_mock.get(url, alias="foobar")
-            self.assertIn("foobar", httpx_mock.aliases)
-            self.assertEqual(httpx_mock.aliases["foobar"].url, foobar.url)
+            foobar = respx.get(url, alias="foobar")
+            self.assertIn("foobar", respx.aliases)
+            self.assertEqual(respx.aliases["foobar"].url, foobar.url)
+            self.assertEqual(m["foobar"].url, foobar.url)
 
     def test_exception(self):
         with respx.HTTPXMock() as httpx_mock:
@@ -317,18 +320,53 @@ class HTTPXMockTestCase(asynctest.TestCase):
             )
             self.assertEqual(response.text, "foobar #123")
 
+    def test_assert_all_called_fail(self):
+        with self.assertRaises(AssertionError):
+            with respx.HTTPXMock() as httpx_mock:
+                request1 = httpx_mock.get("https://foo/bar/1/", status_code=404)
+                request2 = httpx_mock.post("https://foo/bar/", status_code=201)
+
+                response = httpx.get("https://foo/bar/1/")
+
+                self.assertEqual(response.status_code, 404)
+                self.assertTrue(request1.called)
+                self.assertFalse(request2.called)
+
+    def test_assert_all_called_disabled(self):
+        with respx.HTTPXMock(assert_all_called=False) as httpx_mock:
+            request1 = httpx_mock.get("https://foo/bar/1/", status_code=404)
+            request2 = httpx_mock.post("https://foo/bar/", status_code=201)
+
+            response = httpx.get("https://foo/bar/1/")
+
+            self.assertEqual(response.status_code, 404)
+            self.assertTrue(request1.called)
+            self.assertFalse(request2.called)
+
+    def test_assert_all_called_sucess(self):
+        with respx.HTTPXMock(assert_all_called=True) as httpx_mock:
+            request1 = httpx_mock.get("https://foo/bar/1/", status_code=404)
+            request2 = httpx_mock.post("https://foo/bar/", status_code=201)
+
+            response = httpx.get("https://foo/bar/1/")
+            response = httpx.post("https://foo/bar/")
+
+            self.assertEqual(response.status_code, 201)
+            self.assertTrue(request1.called)
+            self.assertTrue(request2.called)
+
     async def test_stats(self, backend=None):
-        with respx.HTTPXMock() as httpx_mock:
+        with respx.activate():
             url = "https://foo/bar/1/"
-            httpx_mock.get(re.compile("http://some/url"))
-            httpx_mock.delete("http://some/url")
+            respx.get(re.compile("http://some/url"))
+            respx.delete("http://some/url")
 
-            foobar1 = httpx_mock.get(url, status_code=202, alias="get_foobar")
-            foobar2 = httpx_mock.delete(url, status_code=200, alias="del_foobar")
+            foobar1 = respx.get(url, status_code=202, alias="get_foobar")
+            foobar2 = respx.delete(url, status_code=200, alias="del_foobar")
 
             self.assertFalse(foobar1.called)
             self.assertEqual(len(foobar1.calls), 0)
-            self.assertEqual(len(httpx_mock.calls), 0)
+            self.assertEqual(len(respx.calls), 0)
 
             async with httpx.AsyncClient(backend=backend) as client:
                 get_response = await client.get(url)
@@ -355,15 +393,15 @@ class HTTPXMockTestCase(asynctest.TestCase):
             self.assertEqual(_response.status_code, 200)
             self.assertEqual(_response.status_code, del_response.status_code)
 
-            self.assertEqual(len(httpx_mock.calls), 2)
-            self.assertEqual(httpx_mock.calls[0], foobar1.calls[-1])
-            self.assertEqual(httpx_mock.calls[1], foobar2.calls[-1])
+            self.assertEqual(len(respx.calls), 2)
+            self.assertEqual(respx.calls[0], foobar1.calls[-1])
+            self.assertEqual(respx.calls[1], foobar2.calls[-1])
 
-            alias = httpx_mock.aliases["get_foobar"]
+            alias = respx.aliases["get_foobar"]
             self.assertEqual(alias, foobar1)
             self.assertEqual(alias.alias, foobar1.alias)
 
-            alias = httpx_mock["del_foobar"]
+            alias = respx.aliases["del_foobar"]
             self.assertEqual(alias, foobar2)
             self.assertEqual(alias.alias, foobar2.alias)
 

pip install -e .
parse_log_pytest
pytest
pytest pytest-asyncio pytest-cov trio
3.8
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
asynctest==0.13.0
attrs==25.3.0
certifi==2025.1.31
chardet==3.0.4
coverage==7.6.1
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
h11==0.8.1
h2==3.2.0
hpack==3.0.0
hstspreload==2025.1.1
httpx==0.7.6
hyperframe==5.2.0
idna==2.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
outcome==1.3.0.post0
packaging @ file:///croot/packaging_1720101850331/work
pluggy==1.5.0
pytest==8.3.5
pytest-asyncio==0.24.0
pytest-cov==5.0.0
-e git+https://github.com/lundberg/respx.git@3d50d73888a816d39d6806273085589869543a49#egg=respx
rfc3986==1.5.0
sniffio==1.3.1
sortedcontainers==2.4.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
trio==0.27.0

name: respx
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py38h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.1=py38h06a4308_0
  - pip=24.2=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py38h06a4308_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - asynctest==0.13.0
      - attrs==25.3.0
      - certifi==2025.1.31
      - chardet==3.0.4
      - coverage==7.6.1
      - h11==0.8.1
      - h2==3.2.0
      - hpack==3.0.0
      - hstspreload==2025.1.1
      - httpx==0.7.6
      - hyperframe==5.2.0
      - idna==2.10
      - outcome==1.3.0.post0
      - pluggy==1.5.0
      - pytest==8.3.5
      - pytest-asyncio==0.24.0
      - pytest-cov==5.0.0
      - rfc3986==1.5.0
      - sniffio==1.3.1
      - sortedcontainers==2.4.0
      - trio==0.27.0
prefix: /opt/conda/envs/respx

tests/test_mock.py::HTTPXMockTestCase::test_api tests/test_mock.py::HTTPXMockTestCase::test_assert_all_called_disabled tests/test_mock.py::HTTPXMockTestCase::test_assert_all_called_fail tests/test_mock.py::HTTPXMockTestCase::test_assert_all_called_sucess
tests/test_mock.py::HTTPXMockTestCase::test_activate_contextmanager tests/test_mock.py::HTTPXMockTestCase::test_activate_decorator tests/test_mock.py::HTTPXMockTestCase::test_alias tests/test_mock.py::HTTPXMockTestCase::test_async_client tests/test_mock.py::HTTPXMockTestCase::test_callable_content tests/test_mock.py::HTTPXMockTestCase::test_content_type tests/test_mock.py::HTTPXMockTestCase::test_custom_matcher tests/test_mock.py::HTTPXMockTestCase::test_exception tests/test_mock.py::HTTPXMockTestCase::test_headers tests/test_mock.py::HTTPXMockTestCase::test_http_methods tests/test_mock.py::HTTPXMockTestCase::test_invalid_url_pattern tests/test_mock.py::HTTPXMockTestCase::test_json_content tests/test_mock.py::HTTPXMockTestCase::test_raising_content tests/test_mock.py::HTTPXMockTestCase::test_raw_content tests/test_mock.py::HTTPXMockTestCase::test_regex_url_pattern tests/test_mock.py::HTTPXMockTestCase::test_repeated_pattern tests/test_mock.py::HTTPXMockTestCase::test_stats tests/test_mock.py::HTTPXMockTestCase::test_status_code tests/test_mock.py::HTTPXMockTestCase::test_string_url_pattern tests/test_mock.py::HTTPXMockTestCase::test_sync_client tests/test_mock.py::HTTPXMockTestCase::test_trio_backend tests/test_mock.py::HTTPXMockTestCase::test_unknown_url
respx/__init__.py Makefile respx/mock.py
respx/__init__.py Makefile respx/mock.py