Convert TestContext to be pytest-style (#589)

diff --git a/tests/test_ssl.py b/tests/test_ssl.py
index 8c090aa..e0a720b 100644
--- a/tests/test_ssl.py
+++ b/tests/test_ssl.py
@@ -81,7 +81,8 @@
 except ImportError:
     SSL_ST_INIT = SSL_ST_BEFORE = SSL_ST_OK = SSL_ST_RENEGOTIATE = None
 
-from .util import WARNING_TYPE_EXPECTED, NON_ASCII, TestCase
+from .util import (
+    WARNING_TYPE_EXPECTED, NON_ASCII, TestCase, is_consistent_type)
 from .test_crypto import (
     cleartextCertificatePEM, cleartextPrivateKeyPEM,
     client_cert_pem, client_key_pem, server_cert_pem, server_key_pem,
@@ -260,20 +261,7 @@
         return interact_in_memory(client_conn, server_conn)
 
     def _handshakeInMemory(self, client_conn, server_conn):
-        """
-        Perform the TLS handshake between two :py:class:`Connection` instances
-        connected to each other via memory BIOs.
-        """
-        client_conn.set_connect_state()
-        server_conn.set_accept_state()
-
-        for conn in [client_conn, server_conn]:
-            try:
-                conn.do_handshake()
-            except WantReadError:
-                pass
-
-        self._interactInMemory(client_conn, server_conn)
+        return handshake_in_memory(client_conn, server_conn)
 
 
 def interact_in_memory(client_conn, server_conn):
@@ -321,6 +309,23 @@
                     write.bio_write(dirty)
 
 
+def handshake_in_memory(client_conn, server_conn):
+    """
+    Perform the TLS handshake between two `Connection` instances connected to
+    each other via memory BIOs.
+    """
+    client_conn.set_connect_state()
+    server_conn.set_accept_state()
+
+    for conn in [client_conn, server_conn]:
+        try:
+            conn.do_handshake()
+        except WantReadError:
+            pass
+
+    interact_in_memory(client_conn, server_conn)
+
+
 class VersionTests(TestCase):
     """
     Tests for version information exposed by
@@ -402,9 +407,7 @@
 
 class TestContext(object):
     """
-    py.test-based tests for :class:`OpenSSL.SSL.Context`.
-
-    If possible, add new tests here.
+    Unit tests for `OpenSSL.SSL.Context`.
     """
     @pytest.mark.parametrize("cipher_string", [
         b"hello world:AES128-SHA",
@@ -412,7 +415,7 @@
     ])
     def test_set_cipher_list(self, context, cipher_string):
         """
-        :meth:`Context.set_cipher_list` accepts both byte and unicode strings
+        `Context.set_cipher_list` accepts both byte and unicode strings
         for naming the ciphers which connections created with the context
         object will be able to choose from.
         """
@@ -427,23 +430,22 @@
     ])
     def test_set_cipher_list_wrong_args(self, context, cipher_list, error):
         """
-        :meth:`Context.set_cipher_list` raises :exc:`TypeError` when passed a
-        non-string argument and raises :exc:`OpenSSL.SSL.Error` when passed an
-        incorrect cipher list string.
+        `Context.set_cipher_list` raises `TypeError` when passed a non-string
+        argument and raises `OpenSSL.SSL.Error` when passed an incorrect cipher
+        list string.
         """
         with pytest.raises(error):
             context.set_cipher_list(cipher_list)
 
     def test_load_client_ca(self, context, ca_file):
         """
-        :meth:`Context.load_client_ca` works as far as we can tell.
+        `Context.load_client_ca` works as far as we can tell.
         """
         context.load_client_ca(ca_file)
 
     def test_load_client_ca_invalid(self, context, tmpdir):
         """
-        :meth:`Context.load_client_ca` raises an Error if the ca file is
-        invalid.
+        `Context.load_client_ca` raises an Error if the ca file is invalid.
         """
         ca_file = tmpdir.join("test.pem")
         ca_file.write("")
@@ -463,13 +465,13 @@
 
     def test_set_session_id(self, context):
         """
-        :meth:`Context.set_session_id` works as far as we can tell.
+        `Context.set_session_id` works as far as we can tell.
         """
         context.set_session_id(b"abc")
 
     def test_set_session_id_fail(self, context):
         """
-        :meth:`Context.set_session_id` errors are propagated.
+        `Context.set_session_id` errors are propagated.
         """
         with pytest.raises(Error) as e:
             context.set_session_id(b"abc" * 1000)
@@ -482,24 +484,16 @@
 
     def test_set_session_id_unicode(self, context):
         """
-        :meth:`Context.set_session_id` raises a warning if a unicode string is
+        `Context.set_session_id` raises a warning if a unicode string is
         passed.
         """
         pytest.deprecated_call(context.set_session_id, u"abc")
 
-
-class ContextTests(TestCase, _LoopbackMixin):
-    """
-    Unit tests for :class:`OpenSSL.SSL.Context`.
-
-    If possible, add new tests to :class:`TestContext` above.
-    """
     def test_method(self):
         """
-        :py:obj:`Context` can be instantiated with one of
-        :py:obj:`SSLv2_METHOD`, :py:obj:`SSLv3_METHOD`,
-        :py:obj:`SSLv23_METHOD`, :py:obj:`TLSv1_METHOD`,
-        :py:obj:`TLSv1_1_METHOD`, or :py:obj:`TLSv1_2_METHOD`.
+        `Context` can be instantiated with one of `SSLv2_METHOD`,
+        `SSLv3_METHOD`, `SSLv23_METHOD`, `TLSv1_METHOD`, `TLSv1_1_METHOD`,
+        or `TLSv1_2_METHOD`.
         """
         methods = [SSLv23_METHOD, TLSv1_METHOD]
         for meth in methods:
@@ -514,44 +508,45 @@
                 # don't.  Difficult to say in advance.
                 pass
 
-        self.assertRaises(TypeError, Context, "")
-        self.assertRaises(ValueError, Context, 10)
+        with pytest.raises(TypeError):
+            Context("")
+        with pytest.raises(ValueError):
+            Context(10)
 
     @skip_if_py3
     def test_method_long(self):
         """
-        On Python 2 :py:class:`Context` accepts values of type
-        :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context` accepts values of type `long` as well as `int`.
         """
         Context(long(TLSv1_METHOD))
 
     def test_type(self):
         """
-        :py:obj:`Context` and :py:obj:`ContextType` refer to the same type
-        object and can be used to create instances of that type.
+        `Context` and `ContextType` refer to the same type object and can
+        be used to create instances of that type.
         """
-        self.assertIdentical(Context, ContextType)
-        self.assertConsistentType(Context, 'Context', TLSv1_METHOD)
+        assert Context is ContextType
+        assert is_consistent_type(Context, 'Context', TLSv1_METHOD)
 
     def test_use_privatekey(self):
         """
-        :py:obj:`Context.use_privatekey` takes an :py:obj:`OpenSSL.crypto.PKey`
-        instance.
+        `Context.use_privatekey` takes an `OpenSSL.crypto.PKey` instance.
         """
         key = PKey()
         key.generate_key(TYPE_RSA, 128)
         ctx = Context(TLSv1_METHOD)
         ctx.use_privatekey(key)
-        self.assertRaises(TypeError, ctx.use_privatekey, "")
+        with pytest.raises(TypeError):
+            ctx.use_privatekey("")
 
-    def test_use_privatekey_file_missing(self):
+    def test_use_privatekey_file_missing(self, tmpfile):
         """
-        :py:obj:`Context.use_privatekey_file` raises
-        :py:obj:`OpenSSL.SSL.Error` when passed the name of a file which does
-        not exist.
+        `Context.use_privatekey_file` raises `OpenSSL.SSL.Error` when passed
+        the name of a file which does not exist.
         """
         ctx = Context(TLSv1_METHOD)
-        self.assertRaises(Error, ctx.use_privatekey_file, self.mktemp())
+        with pytest.raises(Error):
+            ctx.use_privatekey_file(tmpfile)
 
     def _use_privatekey_file_test(self, pemfile, filetype):
         """
@@ -569,59 +564,56 @@
         ctx = Context(TLSv1_METHOD)
         ctx.use_privatekey_file(pemfile, filetype)
 
-    def test_use_privatekey_file_bytes(self):
+    def test_use_privatekey_file_bytes(self, tmpfile):
         """
         A private key can be specified from a file by passing a ``bytes``
         instance giving the file name to ``Context.use_privatekey_file``.
         """
         self._use_privatekey_file_test(
-            self.mktemp() + NON_ASCII.encode(getfilesystemencoding()),
+            tmpfile + NON_ASCII.encode(getfilesystemencoding()),
             FILETYPE_PEM,
         )
 
-    def test_use_privatekey_file_unicode(self):
+    def test_use_privatekey_file_unicode(self, tmpfile):
         """
         A private key can be specified from a file by passing a ``unicode``
         instance giving the file name to ``Context.use_privatekey_file``.
         """
         self._use_privatekey_file_test(
-            self.mktemp().decode(getfilesystemencoding()) + NON_ASCII,
+            tmpfile.decode(getfilesystemencoding()) + NON_ASCII,
             FILETYPE_PEM,
         )
 
     @skip_if_py3
-    def test_use_privatekey_file_long(self):
+    def test_use_privatekey_file_long(self, tmpfile):
         """
-        On Python 2 :py:obj:`Context.use_privatekey_file` accepts a
-        filetype of type :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.use_privatekey_file` accepts a filetype of
+        type `long` as well as `int`.
         """
-        self._use_privatekey_file_test(self.mktemp(), long(FILETYPE_PEM))
+        self._use_privatekey_file_test(tmpfile, long(FILETYPE_PEM))
 
     def test_use_certificate_wrong_args(self):
         """
-        :py:obj:`Context.use_certificate_wrong_args` raises :py:obj:`TypeError`
-        when not passed exactly one :py:obj:`OpenSSL.crypto.X509` instance as
-        an argument.
+        `Context.use_certificate_wrong_args` raises `TypeError` when not passed
+        exactly one `OpenSSL.crypto.X509` instance as an argument.
         """
         ctx = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, ctx.use_certificate)
-        self.assertRaises(TypeError, ctx.use_certificate, "hello, world")
-        self.assertRaises(
-            TypeError, ctx.use_certificate, X509(), "hello, world"
-        )
+        with pytest.raises(TypeError):
+            ctx.use_certificate("hello, world")
 
     def test_use_certificate_uninitialized(self):
         """
-        :py:obj:`Context.use_certificate` raises :py:obj:`OpenSSL.SSL.Error`
-        when passed a :py:obj:`OpenSSL.crypto.X509` instance which has not been
-        initialized (ie, which does not actually have any certificate data).
+        `Context.use_certificate` raises `OpenSSL.SSL.Error` when passed a
+        `OpenSSL.crypto.X509` instance which has not been initialized
+        (ie, which does not actually have any certificate data).
         """
         ctx = Context(TLSv1_METHOD)
-        self.assertRaises(Error, ctx.use_certificate, X509())
+        with pytest.raises(Error):
+            ctx.use_certificate(X509())
 
     def test_use_certificate(self):
         """
-        :py:obj:`Context.use_certificate` sets the certificate which will be
+        `Context.use_certificate` sets the certificate which will be
         used to identify connections created using the context.
         """
         # TODO
@@ -635,31 +627,25 @@
 
     def test_use_certificate_file_wrong_args(self):
         """
-        :py:obj:`Context.use_certificate_file` raises :py:obj:`TypeError` if
-        called with zero arguments or more than two arguments, or if the first
-        argument is not a byte string or the second argumnent is not an
-        integer.
+        `Context.use_certificate_file` raises `TypeError` if the first
+        argument is not a byte string or the second argument is not an integer.
         """
         ctx = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, ctx.use_certificate_file)
-        self.assertRaises(TypeError, ctx.use_certificate_file, b"somefile",
-                          object())
-        self.assertRaises(
-            TypeError, ctx.use_certificate_file, b"somefile", FILETYPE_PEM,
-            object())
-        self.assertRaises(
-            TypeError, ctx.use_certificate_file, object(), FILETYPE_PEM)
-        self.assertRaises(
-            TypeError, ctx.use_certificate_file, b"somefile", object())
+        with pytest.raises(TypeError):
+            ctx.use_certificate_file(object(), FILETYPE_PEM)
+        with pytest.raises(TypeError):
+            ctx.use_certificate_file(b"somefile", object())
+        with pytest.raises(TypeError):
+            ctx.use_certificate_file(object(), FILETYPE_PEM)
 
-    def test_use_certificate_file_missing(self):
+    def test_use_certificate_file_missing(self, tmpfile):
         """
-        :py:obj:`Context.use_certificate_file` raises
-        `:py:obj:`OpenSSL.SSL.Error` if passed the name of a file which does
-        not exist.
+        `Context.use_certificate_file` raises `OpenSSL.SSL.Error` if passed
+        the name of a file which does not exist.
         """
         ctx = Context(TLSv1_METHOD)
-        self.assertRaises(Error, ctx.use_certificate_file, self.mktemp())
+        with pytest.raises(Error):
+            ctx.use_certificate_file(tmpfile)
 
     def _use_certificate_file_test(self, certificate_file):
         """
@@ -676,31 +662,31 @@
         ctx = Context(TLSv1_METHOD)
         ctx.use_certificate_file(certificate_file)
 
-    def test_use_certificate_file_bytes(self):
+    def test_use_certificate_file_bytes(self, tmpfile):
         """
-        :py:obj:`Context.use_certificate_file` sets the certificate (given as a
-        ``bytes`` filename) which will be used to identify connections created
+        `Context.use_certificate_file` sets the certificate (given as a
+        `bytes` filename) which will be used to identify connections created
         using the context.
         """
-        filename = self.mktemp() + NON_ASCII.encode(getfilesystemencoding())
+        filename = tmpfile + NON_ASCII.encode(getfilesystemencoding())
         self._use_certificate_file_test(filename)
 
-    def test_use_certificate_file_unicode(self):
+    def test_use_certificate_file_unicode(self, tmpfile):
         """
-        :py:obj:`Context.use_certificate_file` sets the certificate (given as a
-        ``bytes`` filename) which will be used to identify connections created
+        `Context.use_certificate_file` sets the certificate (given as a
+        `bytes` filename) which will be used to identify connections created
         using the context.
         """
-        filename = self.mktemp().decode(getfilesystemencoding()) + NON_ASCII
+        filename = tmpfile.decode(getfilesystemencoding()) + NON_ASCII
         self._use_certificate_file_test(filename)
 
     @skip_if_py3
-    def test_use_certificate_file_long(self):
+    def test_use_certificate_file_long(self, tmpfile):
         """
-        On Python 2 :py:obj:`Context.use_certificate_file` accepts a
-        filetype of type :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.use_certificate_file` accepts a
+        filetype of type `long` as well as `int`.
         """
-        pem_filename = self.mktemp()
+        pem_filename = tmpfile
         with open(pem_filename, "wb") as pem_file:
             pem_file.write(cleartextCertificatePEM)
 
@@ -709,78 +695,52 @@
 
     def test_check_privatekey_valid(self):
         """
-        :py:obj:`Context.check_privatekey` returns :py:obj:`None` if the
-        :py:obj:`Context` instance has been configured to use a matched key and
-        certificate pair.
+        `Context.check_privatekey` returns `None` if the `Context` instance
+        has been configured to use a matched key and certificate pair.
         """
         key = load_privatekey(FILETYPE_PEM, client_key_pem)
         cert = load_certificate(FILETYPE_PEM, client_cert_pem)
         context = Context(TLSv1_METHOD)
         context.use_privatekey(key)
         context.use_certificate(cert)
-        self.assertIs(None, context.check_privatekey())
+        assert None is context.check_privatekey()
 
     def test_check_privatekey_invalid(self):
         """
-        :py:obj:`Context.check_privatekey` raises :py:obj:`Error` if the
-        :py:obj:`Context` instance has been configured to use a key and
-        certificate pair which don't relate to each other.
+        `Context.check_privatekey` raises `Error` if the `Context` instance
+        has been configured to use a key and certificate pair which don't
+        relate to each other.
         """
         key = load_privatekey(FILETYPE_PEM, client_key_pem)
         cert = load_certificate(FILETYPE_PEM, server_cert_pem)
         context = Context(TLSv1_METHOD)
         context.use_privatekey(key)
         context.use_certificate(cert)
-        self.assertRaises(Error, context.check_privatekey)
-
-    def test_check_privatekey_wrong_args(self):
-        """
-        :py:obj:`Context.check_privatekey` raises :py:obj:`TypeError` if called
-        with other than no arguments.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.check_privatekey, object())
-
-    def test_set_app_data_wrong_args(self):
-        """
-        :py:obj:`Context.set_app_data` raises :py:obj:`TypeError` if called
-        with other than one argument.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_app_data)
-        self.assertRaises(TypeError, context.set_app_data, None, None)
-
-    def test_get_app_data_wrong_args(self):
-        """
-        :py:obj:`Context.get_app_data` raises :py:obj:`TypeError` if called
-        with any arguments.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.get_app_data, None)
+        with pytest.raises(Error):
+            context.check_privatekey()
 
     def test_app_data(self):
         """
-        :py:obj:`Context.set_app_data` stores an object for later retrieval
-        using :py:obj:`Context.get_app_data`.
+        `Context.set_app_data` stores an object for later retrieval
+        using `Context.get_app_data`.
         """
         app_data = object()
         context = Context(TLSv1_METHOD)
         context.set_app_data(app_data)
-        self.assertIdentical(context.get_app_data(), app_data)
+        assert context.get_app_data() is app_data
 
     def test_set_options_wrong_args(self):
         """
-        :py:obj:`Context.set_options` raises :py:obj:`TypeError` if called with
-        the wrong number of arguments or a non-:py:obj:`int` argument.
+        `Context.set_options` raises `TypeError` if called with
+        a non-`int` argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_options)
-        self.assertRaises(TypeError, context.set_options, None)
-        self.assertRaises(TypeError, context.set_options, 1, None)
+        with pytest.raises(TypeError):
+            context.set_options(None)
 
     def test_set_options(self):
         """
-        :py:obj:`Context.set_options` returns the new options value.
+        `Context.set_options` returns the new options value.
         """
         context = Context(TLSv1_METHOD)
         options = context.set_options(OP_NO_SSLv2)
@@ -789,8 +749,8 @@
     @skip_if_py3
     def test_set_options_long(self):
         """
-        On Python 2 :py:obj:`Context.set_options` accepts values of type
-        :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.set_options` accepts values of type
+        `long` as well as `int`.
         """
         context = Context(TLSv1_METHOD)
         options = context.set_options(long(OP_NO_SSLv2))
@@ -798,142 +758,117 @@
 
     def test_set_mode_wrong_args(self):
         """
-        :py:obj:`Context.set`mode} raises :py:obj:`TypeError` if called with
-        the wrong number of arguments or a non-:py:obj:`int` argument.
+        `Context.set_mode` raises `TypeError` if called with
+        a non-`int` argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_mode)
-        self.assertRaises(TypeError, context.set_mode, None)
-        self.assertRaises(TypeError, context.set_mode, 1, None)
+        with pytest.raises(TypeError):
+            context.set_mode(None)
 
     def test_set_mode(self):
         """
-        :py:obj:`Context.set_mode` accepts a mode bitvector and returns the
+        `Context.set_mode` accepts a mode bitvector and returns the
         newly set mode.
         """
         context = Context(TLSv1_METHOD)
-        self.assertTrue(
-            MODE_RELEASE_BUFFERS & context.set_mode(MODE_RELEASE_BUFFERS))
+        assert MODE_RELEASE_BUFFERS & context.set_mode(MODE_RELEASE_BUFFERS)
 
     @skip_if_py3
     def test_set_mode_long(self):
         """
-        On Python 2 :py:obj:`Context.set_mode` accepts values of type
-        :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.set_mode` accepts values of type `long` as well
+        as `int`.
         """
         context = Context(TLSv1_METHOD)
         mode = context.set_mode(long(MODE_RELEASE_BUFFERS))
-        self.assertTrue(MODE_RELEASE_BUFFERS & mode)
+        assert MODE_RELEASE_BUFFERS & mode
 
     def test_set_timeout_wrong_args(self):
         """
-        :py:obj:`Context.set_timeout` raises :py:obj:`TypeError` if called with
-        the wrong number of arguments or a non-:py:obj:`int` argument.
+        `Context.set_timeout` raises `TypeError` if called with
+        a non-`int` argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_timeout)
-        self.assertRaises(TypeError, context.set_timeout, None)
-        self.assertRaises(TypeError, context.set_timeout, 1, None)
-
-    def test_get_timeout_wrong_args(self):
-        """
-        :py:obj:`Context.get_timeout` raises :py:obj:`TypeError` if called with
-        any arguments.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.get_timeout, None)
+        with pytest.raises(TypeError):
+            context.set_timeout(None)
 
     def test_timeout(self):
         """
-        :py:obj:`Context.set_timeout` sets the session timeout for all
-        connections created using the context object.
-        :py:obj:`Context.get_timeout` retrieves this value.
+        `Context.set_timeout` sets the session timeout for all connections
+        created using the context object. `Context.get_timeout` retrieves
+        this value.
         """
         context = Context(TLSv1_METHOD)
         context.set_timeout(1234)
-        self.assertEquals(context.get_timeout(), 1234)
+        assert context.get_timeout() == 1234
 
     @skip_if_py3
     def test_timeout_long(self):
         """
-        On Python 2 :py:obj:`Context.set_timeout` accepts values of type
-        `long` as well as int.
+        On Python 2 `Context.set_timeout` accepts values of type `long` as
+        well as int.
         """
         context = Context(TLSv1_METHOD)
         context.set_timeout(long(1234))
-        self.assertEquals(context.get_timeout(), 1234)
+        assert context.get_timeout() == 1234
 
     def test_set_verify_depth_wrong_args(self):
         """
-        :py:obj:`Context.set_verify_depth` raises :py:obj:`TypeError` if called
-        with the wrong number of arguments or a non-:py:obj:`int` argument.
+        `Context.set_verify_depth` raises `TypeError` if called with a
+        non-`int` argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_verify_depth)
-        self.assertRaises(TypeError, context.set_verify_depth, None)
-        self.assertRaises(TypeError, context.set_verify_depth, 1, None)
-
-    def test_get_verify_depth_wrong_args(self):
-        """
-        :py:obj:`Context.get_verify_depth` raises :py:obj:`TypeError` if called
-        with any arguments.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.get_verify_depth, None)
+        with pytest.raises(TypeError):
+            context.set_verify_depth(None)
 
     def test_verify_depth(self):
         """
-        :py:obj:`Context.set_verify_depth` sets the number of certificates in
+        `Context.set_verify_depth` sets the number of certificates in
         a chain to follow before giving up.  The value can be retrieved with
-        :py:obj:`Context.get_verify_depth`.
+        `Context.get_verify_depth`.
         """
         context = Context(TLSv1_METHOD)
         context.set_verify_depth(11)
-        self.assertEquals(context.get_verify_depth(), 11)
+        assert context.get_verify_depth() == 11
 
     @skip_if_py3
     def test_verify_depth_long(self):
         """
-        On Python 2 :py:obj:`Context.set_verify_depth` accepts values of
-        type `long` as well as int.
+        On Python 2 `Context.set_verify_depth` accepts values of type `long`
+        as well as int.
         """
         context = Context(TLSv1_METHOD)
         context.set_verify_depth(long(11))
-        self.assertEquals(context.get_verify_depth(), 11)
+        assert context.get_verify_depth() == 11
 
-    def _write_encrypted_pem(self, passphrase):
+    def _write_encrypted_pem(self, passphrase, tmpfile):
         """
         Write a new private key out to a new file, encrypted using the given
         passphrase.  Return the path to the new file.
         """
         key = PKey()
         key.generate_key(TYPE_RSA, 128)
-        pemFile = self.mktemp()
-        fObj = open(pemFile, 'w')
         pem = dump_privatekey(FILETYPE_PEM, key, "blowfish", passphrase)
-        fObj.write(pem.decode('ascii'))
-        fObj.close()
-        return pemFile
+        with open(tmpfile, 'w') as fObj:
+            fObj.write(pem.decode('ascii'))
+        return tmpfile
 
     def test_set_passwd_cb_wrong_args(self):
         """
-        :py:obj:`Context.set_passwd_cb` raises :py:obj:`TypeError` if called
-        with the wrong arguments or with a non-callable first argument.
+        `Context.set_passwd_cb` raises `TypeError` if called with a
+        non-callable first argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_passwd_cb)
-        self.assertRaises(TypeError, context.set_passwd_cb, None)
-        self.assertRaises(
-            TypeError, context.set_passwd_cb, lambda: None, None, None
-        )  # pragma: nocover
+        with pytest.raises(TypeError):
+            context.set_passwd_cb(None)
 
-    def test_set_passwd_cb(self):
+    def test_set_passwd_cb(self, tmpfile):
         """
-        :py:obj:`Context.set_passwd_cb` accepts a callable which will be
-        invoked when a private key is loaded from an encrypted PEM.
+        `Context.set_passwd_cb` accepts a callable which will be invoked when
+        a private key is loaded from an encrypted PEM.
         """
         passphrase = b"foobar"
-        pemFile = self._write_encrypted_pem(passphrase)
+        pemFile = self._write_encrypted_pem(passphrase, tmpfile)
         calledWith = []
 
         def passphraseCallback(maxlen, verify, extra):
@@ -942,63 +877,65 @@
         context = Context(TLSv1_METHOD)
         context.set_passwd_cb(passphraseCallback)
         context.use_privatekey_file(pemFile)
-        self.assertTrue(len(calledWith), 1)
-        self.assertTrue(isinstance(calledWith[0][0], int))
-        self.assertTrue(isinstance(calledWith[0][1], int))
-        self.assertEqual(calledWith[0][2], None)
+        assert len(calledWith) == 1
+        assert isinstance(calledWith[0][0], int)
+        assert isinstance(calledWith[0][1], int)
+        assert calledWith[0][2] is None
 
-    def test_passwd_callback_exception(self):
+    def test_passwd_callback_exception(self, tmpfile):
         """
-        :py:obj:`Context.use_privatekey_file` propagates any exception raised
+        `Context.use_privatekey_file` propagates any exception raised
         by the passphrase callback.
         """
-        pemFile = self._write_encrypted_pem(b"monkeys are nice")
+        pemFile = self._write_encrypted_pem(b"monkeys are nice", tmpfile)
 
         def passphraseCallback(maxlen, verify, extra):
             raise RuntimeError("Sorry, I am a fail.")
 
         context = Context(TLSv1_METHOD)
         context.set_passwd_cb(passphraseCallback)
-        self.assertRaises(RuntimeError, context.use_privatekey_file, pemFile)
+        with pytest.raises(RuntimeError):
+            context.use_privatekey_file(pemFile)
 
-    def test_passwd_callback_false(self):
+    def test_passwd_callback_false(self, tmpfile):
         """
-        :py:obj:`Context.use_privatekey_file` raises
-        :py:obj:`OpenSSL.SSL.Error` if the passphrase callback returns a false
-        value.
+        `Context.use_privatekey_file` raises `OpenSSL.SSL.Error` if the
+        passphrase callback returns a false value.
         """
-        pemFile = self._write_encrypted_pem(b"monkeys are nice")
+        pemFile = self._write_encrypted_pem(b"monkeys are nice", tmpfile)
 
         def passphraseCallback(maxlen, verify, extra):
             return b""
 
         context = Context(TLSv1_METHOD)
         context.set_passwd_cb(passphraseCallback)
-        self.assertRaises(Error, context.use_privatekey_file, pemFile)
+        with pytest.raises(Error):
+            context.use_privatekey_file(pemFile)
 
-    def test_passwd_callback_non_string(self):
+    def test_passwd_callback_non_string(self, tmpfile):
         """
-        :py:obj:`Context.use_privatekey_file` raises
-        :py:obj:`OpenSSL.SSL.Error` if the passphrase callback returns a true
-        non-string value.
+        `Context.use_privatekey_file` raises `OpenSSL.SSL.Error` if the
+        passphrase callback returns a true non-string value.
         """
-        pemFile = self._write_encrypted_pem(b"monkeys are nice")
+        pemFile = self._write_encrypted_pem(b"monkeys are nice", tmpfile)
 
         def passphraseCallback(maxlen, verify, extra):
             return 10
 
         context = Context(TLSv1_METHOD)
         context.set_passwd_cb(passphraseCallback)
-        self.assertRaises(ValueError, context.use_privatekey_file, pemFile)
+        # TODO: Surely this is the wrong error?
+        with pytest.raises(ValueError):
+            context.use_privatekey_file(pemFile)
 
-    def test_passwd_callback_too_long(self):
+    def test_passwd_callback_too_long(self, tmpfile):
         """
         If the passphrase returned by the passphrase callback returns a string
         longer than the indicated maximum length, it is truncated.
         """
         # A priori knowledge!
         passphrase = b"x" * 1024
-        pemFile = self._write_encrypted_pem(passphrase)
+        pemFile = self._write_encrypted_pem(passphrase, tmpfile)
 
         def passphraseCallback(maxlen, verify, extra):
             assert maxlen == 1024
@@ -1012,7 +949,7 @@
 
     def test_set_info_callback(self):
         """
-        :py:obj:`Context.set_info_callback` accepts a callable which will be
+        `Context.set_info_callback` accepts a callable which will be
         invoked when certain information about an SSL connection is available.
         """
         (server, client) = socket_pair()
@@ -1044,14 +981,13 @@
         notConnections = [
             conn for (conn, where, ret) in called
             if not isinstance(conn, Connection)]
-        self.assertEqual(
-            [], notConnections,
-            "Some info callback arguments were not Connection instaces.")
+        assert [] == notConnections, (
+            "Some info callback arguments were not Connection instances.")
 
     def _load_verify_locations_test(self, *args):
         """
         Create a client context which will verify the peer certificate and call
-        its :py:obj:`load_verify_locations` method with the given arguments.
+        its `load_verify_locations` method with the given arguments.
         Then connect it to a server and ensure that the handshake succeeds.
         """
         (server, client) = socket_pair()
@@ -1083,48 +1019,45 @@
         handshake(clientSSL, serverSSL)
 
         cert = clientSSL.get_peer_certificate()
-        self.assertEqual(cert.get_subject().CN, 'Testing Root CA')
+        assert cert.get_subject().CN == 'Testing Root CA'
 
     def _load_verify_cafile(self, cafile):
         """
         Verify that if path to a file containing a certificate is passed to
-        ``Context.load_verify_locations`` for the ``cafile`` parameter, that
+        `Context.load_verify_locations` for the ``cafile`` parameter, that
         certificate is used as a trust root for the purposes of verifying
-        connections created using that ``Context``.
+        connections created using that `Context`.
         """
-        fObj = open(cafile, 'w')
-        fObj.write(cleartextCertificatePEM.decode('ascii'))
-        fObj.close()
+        with open(cafile, 'w') as fObj:
+            fObj.write(cleartextCertificatePEM.decode('ascii'))
 
         self._load_verify_locations_test(cafile)
 
-    def test_load_verify_bytes_cafile(self):
+    def test_load_verify_bytes_cafile(self, tmpfile):
         """
-        :py:obj:`Context.load_verify_locations` accepts a file name as a
-        ``bytes`` instance and uses the certificates within for verification
-        purposes.
+        `Context.load_verify_locations` accepts a file name as a `bytes`
+        instance and uses the certificates within for verification purposes.
         """
-        cafile = self.mktemp() + NON_ASCII.encode(getfilesystemencoding())
+        cafile = tmpfile + NON_ASCII.encode(getfilesystemencoding())
         self._load_verify_cafile(cafile)
 
-    def test_load_verify_unicode_cafile(self):
+    def test_load_verify_unicode_cafile(self, tmpfile):
         """
-        :py:obj:`Context.load_verify_locations` accepts a file name as a
-        ``unicode`` instance and uses the certificates within for verification
-        purposes.
+        `Context.load_verify_locations` accepts a file name as a `unicode`
+        instance and uses the certificates within for verification purposes.
         """
         self._load_verify_cafile(
-            self.mktemp().decode(getfilesystemencoding()) + NON_ASCII
+            tmpfile.decode(getfilesystemencoding()) + NON_ASCII
         )
 
-    def test_load_verify_invalid_file(self):
+    def test_load_verify_invalid_file(self, tmpfile):
         """
-        :py:obj:`Context.load_verify_locations` raises :py:obj:`Error` when
-        passed a non-existent cafile.
+        `Context.load_verify_locations` raises `Error` when passed a
+        non-existent cafile.
         """
         clientContext = Context(TLSv1_METHOD)
-        self.assertRaises(
-            Error, clientContext.load_verify_locations, self.mktemp())
+        with pytest.raises(Error):
+            clientContext.load_verify_locations(tmpfile)
 
     def _load_verify_directory_locations_capath(self, capath):
         """
@@ -1144,41 +1077,34 @@
 
         self._load_verify_locations_test(None, capath)
 
-    def test_load_verify_directory_bytes_capath(self):
+    def test_load_verify_directory_bytes_capath(self, tmpfile):
         """
-        :py:obj:`Context.load_verify_locations` accepts a directory name as a
-        ``bytes`` instance and uses the certificates within for verification
-        purposes.
+        `Context.load_verify_locations` accepts a directory name as a `bytes`
+        instance and uses the certificates within for verification purposes.
         """
         self._load_verify_directory_locations_capath(
-            self.mktemp() + NON_ASCII.encode(getfilesystemencoding())
+            tmpfile + NON_ASCII.encode(getfilesystemencoding())
         )
 
-    def test_load_verify_directory_unicode_capath(self):
+    def test_load_verify_directory_unicode_capath(self, tmpfile):
         """
-        :py:obj:`Context.load_verify_locations` accepts a directory name as a
-        ``unicode`` instance and uses the certificates within for verification
-        purposes.
+        `Context.load_verify_locations` accepts a directory name as a `unicode`
+        instance and uses the certificates within for verification purposes.
         """
         self._load_verify_directory_locations_capath(
-            self.mktemp().decode(getfilesystemencoding()) + NON_ASCII
+            tmpfile.decode(getfilesystemencoding()) + NON_ASCII
         )
 
     def test_load_verify_locations_wrong_args(self):
         """
-        :py:obj:`Context.load_verify_locations` raises :py:obj:`TypeError` if
-        called with the wrong number of arguments or with non-:py:obj:`str`
+        `Context.load_verify_locations` raises `TypeError` if with non-`str`
         arguments.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.load_verify_locations)
-        self.assertRaises(TypeError, context.load_verify_locations, object())
-        self.assertRaises(
-            TypeError, context.load_verify_locations, object(), object()
-        )
-        self.assertRaises(
-            TypeError, context.load_verify_locations, None, None, None
-        )
+        with pytest.raises(TypeError):
+            context.load_verify_locations(object())
+        with pytest.raises(TypeError):
+            context.load_verify_locations(object(), object())
 
     @pytest.mark.skipif(
         platform == "win32",
@@ -1187,9 +1113,8 @@
     )
     def test_set_default_verify_paths(self):
         """
-        :py:obj:`Context.set_default_verify_paths` causes the
-        platform-specific CA certificate locations to be used for
-        verification purposes.
+        `Context.set_default_verify_paths` causes the platform-specific CA
+        certificate locations to be used for verification purposes.
         """
         # Testing this requires a server with a certificate signed by one
         # of the CAs in the platform CA location.  Getting one of those
@@ -1212,30 +1137,16 @@
         clientSSL.set_connect_state()
         clientSSL.do_handshake()
         clientSSL.send(b"GET / HTTP/1.0\r\n\r\n")
-        self.assertTrue(clientSSL.recv(1024))
-
-    def test_set_default_verify_paths_signature(self):
-        """
-        :py:obj:`Context.set_default_verify_paths` takes no arguments and
-        raises :py:obj:`TypeError` if given any.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_default_verify_paths, None)
-        self.assertRaises(TypeError, context.set_default_verify_paths, 1)
-        self.assertRaises(TypeError, context.set_default_verify_paths, "")
+        assert clientSSL.recv(1024)
 
     def test_add_extra_chain_cert_invalid_cert(self):
         """
-        :py:obj:`Context.add_extra_chain_cert` raises :py:obj:`TypeError` if
-        called with other than one argument or if called with an object which
-        is not an instance of :py:obj:`X509`.
+        `Context.add_extra_chain_cert` raises `TypeError` if called with an
+        object which is not an instance of `X509`.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.add_extra_chain_cert)
-        self.assertRaises(TypeError, context.add_extra_chain_cert, object())
-        self.assertRaises(
-            TypeError, context.add_extra_chain_cert, object(), object()
-        )
+        with pytest.raises(TypeError):
+            context.add_extra_chain_cert(object())
 
     def _handshake_test(self, serverContext, clientContext):
         """
@@ -1251,8 +1162,8 @@
         client.set_connect_state()
 
         # Make them talk to each other.
-        # self._interactInMemory(client, server)
-        for i in range(3):
+        # interact_in_memory(client, server)
+        for _ in range(3):
             for s in [client, server]:
                 try:
                     s.do_handshake()
@@ -1262,7 +1173,7 @@
     def test_set_verify_callback_connection_argument(self):
         """
         The first argument passed to the verify callback is the
-        :py:class:`Connection` instance for which verification is taking place.
+        `Connection` instance for which verification is taking place.
         """
         serverContext = Context(TLSv1_METHOD)
         serverContext.use_privatekey(
@@ -1282,15 +1193,15 @@
         clientConnection = Connection(clientContext, None)
         clientConnection.set_connect_state()
 
-        self._handshakeInMemory(clientConnection, serverConnection)
+        handshake_in_memory(clientConnection, serverConnection)
 
-        self.assertIdentical(verify.connection, clientConnection)
+        assert verify.connection is clientConnection
 
     def test_set_verify_callback_exception(self):
         """
-        If the verify callback passed to :py:obj:`Context.set_verify` raises an
+        If the verify callback passed to `Context.set_verify` raises an
         exception, verification fails and the exception is propagated to the
-        caller of :py:obj:`Connection.do_handshake`.
+        caller of `Connection.do_handshake`.
         """
         serverContext = Context(TLSv1_METHOD)
         serverContext.use_privatekey(
@@ -1307,14 +1218,14 @@
         with pytest.raises(Exception) as exc:
             self._handshake_test(serverContext, clientContext)
 
-        self.assertEqual("silly verify failure", str(exc.value))
+        assert "silly verify failure" == str(exc.value)
 
-    def test_add_extra_chain_cert(self):
+    def test_add_extra_chain_cert(self, tmpdir):
         """
-        :py:obj:`Context.add_extra_chain_cert` accepts an :py:obj:`X509`
+        `Context.add_extra_chain_cert` accepts an `X509`
         instance to add to the certificate chain.
 
-        See :py:obj:`_create_certificate_chain` for the details of the
+        See `_create_certificate_chain` for the details of the
         certificate chain tested.
 
         The chain is tested by starting a server with scert and connecting
@@ -1329,13 +1240,13 @@
         for cert, name in [(cacert, 'ca.pem'),
                            (icert, 'i.pem'),
                            (scert, 's.pem')]:
-            with open(join(self.tmpdir, name), 'w') as f:
+            with tmpdir.join(name).open('w') as f:
                 f.write(dump_certificate(FILETYPE_PEM, cert).decode('ascii'))
 
         for key, name in [(cakey, 'ca.key'),
                           (ikey, 'i.key'),
                           (skey, 's.key')]:
-            with open(join(self.tmpdir, name), 'w') as f:
+            with tmpdir.join(name).open('w') as f:
                 f.write(dump_privatekey(FILETYPE_PEM, key).decode('ascii'))
 
         # Create the server context
@@ -1349,14 +1260,14 @@
         clientContext = Context(TLSv1_METHOD)
         clientContext.set_verify(
             VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT, verify_cb)
-        clientContext.load_verify_locations(join(self.tmpdir, "ca.pem"))
+        clientContext.load_verify_locations(str(tmpdir.join("ca.pem")))
 
         # Try it out.
         self._handshake_test(serverContext, clientContext)
 
     def _use_certificate_chain_file_test(self, certdir):
         """
-        Verify that :py:obj:`Context.use_certificate_chain_file` reads a
+        Verify that `Context.use_certificate_chain_file` reads a
         certificate chain from a specified file.
 
         The chain is tested by starting a server with scert and connecting to
@@ -1392,98 +1303,86 @@
 
         self._handshake_test(serverContext, clientContext)
 
-    def test_use_certificate_chain_file_bytes(self):
+    def test_use_certificate_chain_file_bytes(self, tmpfile):
         """
         ``Context.use_certificate_chain_file`` accepts the name of a file (as
         an instance of ``bytes``) to specify additional certificates to use to
         construct and verify a trust chain.
         """
         self._use_certificate_chain_file_test(
-            self.mktemp() + NON_ASCII.encode(getfilesystemencoding())
+            tmpfile + NON_ASCII.encode(getfilesystemencoding())
         )
 
-    def test_use_certificate_chain_file_unicode(self):
+    def test_use_certificate_chain_file_unicode(self, tmpfile):
         """
         ``Context.use_certificate_chain_file`` accepts the name of a file (as
         an instance of ``unicode``) to specify additional certificates to use
         to construct and verify a trust chain.
         """
         self._use_certificate_chain_file_test(
-            self.mktemp().decode(getfilesystemencoding()) + NON_ASCII
+            tmpfile.decode(getfilesystemencoding()) + NON_ASCII
         )
 
     def test_use_certificate_chain_file_wrong_args(self):
         """
-        :py:obj:`Context.use_certificate_chain_file` raises :py:obj:`TypeError`
-        if passed zero or more than one argument or when passed a non-byte
-        string single argument.  It also raises :py:obj:`OpenSSL.SSL.Error`
-        when passed a bad chain file name (for example, the name of a file
-        which does not exist).
+        `Context.use_certificate_chain_file` raises `TypeError` if passed a
+        non-byte string single argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.use_certificate_chain_file)
-        self.assertRaises(
-            TypeError, context.use_certificate_chain_file, object()
-        )
-        self.assertRaises(
-            TypeError, context.use_certificate_chain_file, b"foo", object()
-        )
+        with pytest.raises(TypeError):
+            context.use_certificate_chain_file(object())
 
-        self.assertRaises(
-            Error, context.use_certificate_chain_file, self.mktemp()
-        )
-
-    def test_get_verify_mode_wrong_args(self):
+    def test_use_certificate_chain_file_missing_file(self, tmpfile):
         """
-        :py:obj:`Context.get_verify_mode` raises :py:obj:`TypeError` if called
-        with any arguments.
+        `Context.use_certificate_chain_file` raises `OpenSSL.SSL.Error` when
+        passed a bad chain file name (for example, the name of a file which
+        does not exist).
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.get_verify_mode, None)
+        with pytest.raises(Error):
+            context.use_certificate_chain_file(tmpfile)
 
     def test_set_verify_mode(self):
         """
-        :py:obj:`Context.get_verify_mode` returns the verify mode flags
-        previously passed to :py:obj:`Context.set_verify`.
+        `Context.get_verify_mode` returns the verify mode flags previously
+        passed to `Context.set_verify`.
         """
         context = Context(TLSv1_METHOD)
-        self.assertEquals(context.get_verify_mode(), 0)
+        assert context.get_verify_mode() == 0
         context.set_verify(
             VERIFY_PEER | VERIFY_CLIENT_ONCE, lambda *args: None)
-        self.assertEquals(
-            context.get_verify_mode(), VERIFY_PEER | VERIFY_CLIENT_ONCE)
+        assert context.get_verify_mode() == (VERIFY_PEER | VERIFY_CLIENT_ONCE)
 
     @skip_if_py3
     def test_set_verify_mode_long(self):
         """
-        On Python 2 :py:obj:`Context.set_verify_mode` accepts values of
-        type :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.set_verify_mode` accepts values of type `long`
+        as well as `int`.
         """
         context = Context(TLSv1_METHOD)
-        self.assertEquals(context.get_verify_mode(), 0)
+        assert context.get_verify_mode() == 0
         context.set_verify(
             long(VERIFY_PEER | VERIFY_CLIENT_ONCE), lambda *args: None
         )  # pragma: nocover
-        self.assertEquals(
-            context.get_verify_mode(), VERIFY_PEER | VERIFY_CLIENT_ONCE)
+        assert context.get_verify_mode() == (VERIFY_PEER | VERIFY_CLIENT_ONCE)
 
     def test_load_tmp_dh_wrong_args(self):
         """
-        :py:obj:`Context.load_tmp_dh` raises :py:obj:`TypeError` if called with
-        the wrong number of arguments or with a non-:py:obj:`str` argument.
+        `Context.load_tmp_dh` raises `TypeError` if called with a
+        non-`str` argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.load_tmp_dh)
-        self.assertRaises(TypeError, context.load_tmp_dh, "foo", None)
-        self.assertRaises(TypeError, context.load_tmp_dh, object())
+        with pytest.raises(TypeError):
+            context.load_tmp_dh(object())
 
     def test_load_tmp_dh_missing_file(self):
         """
-        :py:obj:`Context.load_tmp_dh` raises :py:obj:`OpenSSL.SSL.Error` if the
+        `Context.load_tmp_dh` raises `OpenSSL.SSL.Error` if the
         specified file does not exist.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(Error, context.load_tmp_dh, b"hello")
+        with pytest.raises(Error):
+            context.load_tmp_dh(b"hello")
 
     def _load_tmp_dh_test(self, dhfilename):
         """
@@ -1497,28 +1396,28 @@
         context.load_tmp_dh(dhfilename)
         # XXX What should I assert here? -exarkun
 
-    def test_load_tmp_dh_bytes(self):
+    def test_load_tmp_dh_bytes(self, tmpfile):
         """
-        :py:obj:`Context.load_tmp_dh` loads Diffie-Hellman parameters from the
+        `Context.load_tmp_dh` loads Diffie-Hellman parameters from the
         specified file (given as ``bytes``).
         """
         self._load_tmp_dh_test(
-            self.mktemp() + NON_ASCII.encode(getfilesystemencoding()),
+            tmpfile + NON_ASCII.encode(getfilesystemencoding()),
         )
 
-    def test_load_tmp_dh_unicode(self):
+    def test_load_tmp_dh_unicode(self, tmpfile):
         """
-        :py:obj:`Context.load_tmp_dh` loads Diffie-Hellman parameters from the
+        `Context.load_tmp_dh` loads Diffie-Hellman parameters from the
         specified file (given as ``unicode``).
         """
         self._load_tmp_dh_test(
-            self.mktemp().decode(getfilesystemencoding()) + NON_ASCII,
+            tmpfile.decode(getfilesystemencoding()) + NON_ASCII,
         )
 
     def test_set_tmp_ecdh(self):
         """
-        :py:obj:`Context.set_tmp_ecdh` sets the elliptic curve for
-        Diffie-Hellman to the specified curve.
+        `Context.set_tmp_ecdh` sets the elliptic curve for Diffie-Hellman to
+        the specified curve.
         """
         context = Context(TLSv1_METHOD)
         for curve in get_elliptic_curves():
@@ -1533,52 +1432,42 @@
 
     def test_set_session_cache_mode_wrong_args(self):
         """
-        :py:obj:`Context.set_session_cache_mode` raises :py:obj:`TypeError` if
+        `Context.set_session_cache_mode` raises `TypeError` if called with
+        a non-integer argument.
         called with other than one integer argument.
         """
         context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.set_session_cache_mode)
-        self.assertRaises(TypeError, context.set_session_cache_mode, object())
-
-    def test_get_session_cache_mode_wrong_args(self):
-        """
-        :py:obj:`Context.get_session_cache_mode` raises :py:obj:`TypeError` if
-        called with any arguments.
-        """
-        context = Context(TLSv1_METHOD)
-        self.assertRaises(TypeError, context.get_session_cache_mode, 1)
+        with pytest.raises(TypeError):
+            context.set_session_cache_mode(object())
 
     def test_session_cache_mode(self):
         """
-        :py:obj:`Context.set_session_cache_mode` specifies how sessions are
-        cached.  The setting can be retrieved via
-        :py:obj:`Context.get_session_cache_mode`.
+        `Context.set_session_cache_mode` specifies how sessions are cached.
+        The setting can be retrieved via `Context.get_session_cache_mode`.
         """
         context = Context(TLSv1_METHOD)
         context.set_session_cache_mode(SESS_CACHE_OFF)
         off = context.set_session_cache_mode(SESS_CACHE_BOTH)
-        self.assertEqual(SESS_CACHE_OFF, off)
-        self.assertEqual(SESS_CACHE_BOTH, context.get_session_cache_mode())
+        assert SESS_CACHE_OFF == off
+        assert SESS_CACHE_BOTH == context.get_session_cache_mode()
 
     @skip_if_py3
     def test_session_cache_mode_long(self):
         """
-        On Python 2 :py:obj:`Context.set_session_cache_mode` accepts values
-        of type :py:obj:`long` as well as :py:obj:`int`.
+        On Python 2 `Context.set_session_cache_mode` accepts values
+        of type `long` as well as `int`.
         """
         context = Context(TLSv1_METHOD)
         context.set_session_cache_mode(long(SESS_CACHE_BOTH))
-        self.assertEqual(
-            SESS_CACHE_BOTH, context.get_session_cache_mode())
+        assert SESS_CACHE_BOTH == context.get_session_cache_mode()
 
     def test_get_cert_store(self):
         """
-        :py:obj:`Context.get_cert_store` returns a :py:obj:`X509Store`
-        instance.
+        `Context.get_cert_store` returns a `X509Store` instance.
         """
         context = Context(TLSv1_METHOD)
         store = context.get_cert_store()
-        self.assertIsInstance(store, X509Store)
+        assert isinstance(store, X509Store)
 
 
 class TestServerNameCallback(object):