Address most of my own comments
diff --git a/cryptography/exceptions.py b/cryptography/exceptions.py
index d97f20c..8825d3b 100644
--- a/cryptography/exceptions.py
+++ b/cryptography/exceptions.py
@@ -14,8 +14,8 @@
 from __future__ import absolute_import, division, print_function
 
 
-class _Causes(object):
-    BACKEND_MISSING_INTERFACE = 0
+class _Reasons(object):
+    BACKEND_MISSING_INTERFACE = object()
 
 
 class UnsupportedAlgorithm(Exception):
diff --git a/cryptography/hazmat/primitives/twofactor/hotp.py b/cryptography/hazmat/primitives/twofactor/hotp.py
index bac23d1..41c467c 100644
--- a/cryptography/hazmat/primitives/twofactor/hotp.py
+++ b/cryptography/hazmat/primitives/twofactor/hotp.py
@@ -17,7 +17,9 @@
 
 import six
 
-from cryptography.exceptions import InvalidToken, UnsupportedAlgorithm, _Causes
+from cryptography.exceptions import (
+    InvalidToken, UnsupportedAlgorithm, _Reasons
+)
 from cryptography.hazmat.backends.interfaces import HMACBackend
 from cryptography.hazmat.primitives import constant_time, hmac
 from cryptography.hazmat.primitives.hashes import SHA1, SHA256, SHA512
@@ -28,7 +30,7 @@
         if not isinstance(backend, HMACBackend):
             raise UnsupportedAlgorithm(
                 "Backend object does not implement HMACBackend",
-                _Causes.BACKEND_MISSING_INTERFACE
+                _Reasons.BACKEND_MISSING_INTERFACE
             )
 
         if len(key) < 16:
diff --git a/cryptography/hazmat/primitives/twofactor/totp.py b/cryptography/hazmat/primitives/twofactor/totp.py
index d016239..e55ba00 100644
--- a/cryptography/hazmat/primitives/twofactor/totp.py
+++ b/cryptography/hazmat/primitives/twofactor/totp.py
@@ -13,7 +13,9 @@
 
 from __future__ import absolute_import, division, print_function
 
-from cryptography.exceptions import InvalidToken, UnsupportedAlgorithm, _Causes
+from cryptography.exceptions import (
+    InvalidToken, UnsupportedAlgorithm, _Reasons
+)
 from cryptography.hazmat.backends.interfaces import HMACBackend
 from cryptography.hazmat.primitives import constant_time
 from cryptography.hazmat.primitives.twofactor.hotp import HOTP
@@ -24,7 +26,7 @@
         if not isinstance(backend, HMACBackend):
             raise UnsupportedAlgorithm(
                 "Backend object does not implement HMACBackend",
-                _Causes.BACKEND_MISSING_INTERFACE
+                _Reasons.BACKEND_MISSING_INTERFACE
             )
 
         self._time_step = time_step
diff --git a/tests/hazmat/primitives/twofactor/test_hotp.py b/tests/hazmat/primitives/twofactor/test_hotp.py
index b2b2677..803f96f 100644
--- a/tests/hazmat/primitives/twofactor/test_hotp.py
+++ b/tests/hazmat/primitives/twofactor/test_hotp.py
@@ -17,13 +17,13 @@
 
 import pytest
 
-from cryptography.exceptions import InvalidToken, _Causes
+from cryptography.exceptions import InvalidToken, _Reasons
 from cryptography.hazmat.primitives import hashes
 from cryptography.hazmat.primitives.hashes import MD5, SHA1
 from cryptography.hazmat.primitives.twofactor.hotp import HOTP
 
 from ....utils import (
-    load_nist_vectors, load_vectors_from_file, raises_unsupported
+    load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm
 )
 
 vectors = load_vectors_from_file(
@@ -105,5 +105,5 @@
 
     pretend_backend = object()
 
-    with raises_unsupported(_Causes.BACKEND_MISSING_INTERFACE):
+    with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE):
         HOTP(secret, 8, hashes.SHA1(), pretend_backend)
diff --git a/tests/hazmat/primitives/twofactor/test_totp.py b/tests/hazmat/primitives/twofactor/test_totp.py
index 208b0ee..518d3ce 100644
--- a/tests/hazmat/primitives/twofactor/test_totp.py
+++ b/tests/hazmat/primitives/twofactor/test_totp.py
@@ -15,12 +15,12 @@
 
 import pytest
 
-from cryptography.exceptions import InvalidToken, _Causes
+from cryptography.exceptions import InvalidToken, _Reasons
 from cryptography.hazmat.primitives import hashes
 from cryptography.hazmat.primitives.twofactor.totp import TOTP
 
 from ....utils import (
-    load_nist_vectors, load_vectors_from_file, raises_unsupported
+    load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm
 )
 
 vectors = load_vectors_from_file(
@@ -139,5 +139,5 @@
 
     pretend_backend = object()
 
-    with raises_unsupported(_Causes.BACKEND_MISSING_INTERFACE):
+    with raises_unsupported_algorithm(_Reasons.BACKEND_MISSING_INTERFACE):
         TOTP(secret, 8, hashes.SHA1(), 30, pretend_backend)
diff --git a/tests/test_utils.py b/tests/test_utils.py
index b63f1ba..a8046dc 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -21,13 +21,15 @@
 import pytest
 
 import cryptography
+from cryptography.exceptions import UnsupportedAlgorithm, _Reasons
+
 import cryptography_vectors
 
 from .utils import (
     check_backend_support, check_for_iface, load_cryptrec_vectors,
     load_fips_dsa_key_pair_vectors, load_hash_vectors, load_nist_vectors,
     load_pkcs1_vectors, load_rsa_nist_vectors, load_vectors_from_file,
-    select_backends
+    raises_unsupported_algorithm, select_backends
 )
 
 
@@ -1608,3 +1610,32 @@
 
 def test_vector_version():
     assert cryptography.__version__ == cryptography_vectors.__version__
+
+
+def test_raises_unsupported_algorithm_wrong_type():
+    # Check that it asserts if the wrong type of exception is raised.
+
+    class TestException(Exception):
+        pass
+
+    with pytest.raises(TestException):
+        with raises_unsupported_algorithm(None):
+            raise TestException
+
+
+def test_raises_unsupported_algorithm_wrong_reason():
+    # Check that it asserts if the wrong reason code is raised.
+    with pytest.raises(AssertionError):
+        with raises_unsupported_algorithm(None):
+            raise UnsupportedAlgorithm("An error.",
+                                       _Reasons.BACKEND_MISSING_INTERFACE)
+
+
+def test_raises_unsupported_algorithm():
+    # Check that it doesnt assert if the right things are raised.
+    with raises_unsupported_algorithm(
+        _Reasons.BACKEND_MISSING_INTERFACE
+    ) as exc:
+        raise UnsupportedAlgorithm("An error.",
+                                   _Reasons.BACKEND_MISSING_INTERFACE)
+    assert exc
diff --git a/tests/utils.py b/tests/utils.py
index fbe448f..f948642 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -70,10 +70,10 @@
 
 
 @contextmanager
-def raises_unsupported(cause):
+def raises_unsupported_algorithm(cause):
     with pytest.raises(UnsupportedAlgorithm) as exc_info:
-        yield
-    assert exc_info.value._cause == cause
+        yield exc_info
+    assert exc_info.value._cause is cause
 
 
 def load_vectors_from_file(filename, loader):