diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index c0170d1..1faa6b6 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -157,16 +157,11 @@
             if not _is_subtype(self.expected, self._base_type):
                 raise TypeError('%s() arg 1 must be %s' %
                                 (name, self._base_type_str))
-            if args and args[0] is None:
-                warnings.warn("callable is None",
-                              DeprecationWarning, 3)
-                args = ()
             if not args:
                 self.msg = kwargs.pop('msg', None)
                 if kwargs:
-                    warnings.warn('%r is an invalid keyword argument for '
-                                  'this function' % next(iter(kwargs)),
-                                  DeprecationWarning, 3)
+                    raise TypeError('%r is an invalid keyword argument for '
+                                    'this function' % (next(iter(kwargs)),))
                 return self
 
             callable_obj, *args = args
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index 6b34397..baabddd 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -1222,7 +1222,7 @@
         with self.assertRaises(self.failureException):
             self.assertRaises(ExceptionMock, lambda: 0)
         # Failure when the function is None
-        with self.assertWarns(DeprecationWarning):
+        with self.assertRaises(TypeError):
             self.assertRaises(ExceptionMock, None)
         # Failure when another exception is raised
         with self.assertRaises(ExceptionMock):
@@ -1253,8 +1253,7 @@
             with self.assertRaises(ExceptionMock, msg='foobar'):
                 pass
         # Invalid keyword argument
-        with self.assertWarnsRegex(DeprecationWarning, 'foobar'), \
-             self.assertRaises(AssertionError):
+        with self.assertRaisesRegex(TypeError, 'foobar'):
             with self.assertRaises(ExceptionMock, foobar=42):
                 pass
         # Failure when another exception is raised
@@ -1295,7 +1294,7 @@
 
         self.assertRaisesRegex(ExceptionMock, re.compile('expect$'), Stub)
         self.assertRaisesRegex(ExceptionMock, 'expect$', Stub)
-        with self.assertWarns(DeprecationWarning):
+        with self.assertRaises(TypeError):
             self.assertRaisesRegex(ExceptionMock, 'expect$', None)
 
     def testAssertNotRaisesRegex(self):
@@ -1312,8 +1311,7 @@
             with self.assertRaisesRegex(Exception, 'expect', msg='foobar'):
                 pass
         # Invalid keyword argument
-        with self.assertWarnsRegex(DeprecationWarning, 'foobar'), \
-             self.assertRaises(AssertionError):
+        with self.assertRaisesRegex(TypeError, 'foobar'):
             with self.assertRaisesRegex(Exception, 'expect', foobar=42):
                 pass
 
@@ -1388,7 +1386,7 @@
         with self.assertRaises(self.failureException):
             self.assertWarns(RuntimeWarning, lambda: 0)
         # Failure when the function is None
-        with self.assertWarns(DeprecationWarning):
+        with self.assertRaises(TypeError):
             self.assertWarns(RuntimeWarning, None)
         # Failure when another warning is triggered
         with warnings.catch_warnings():
@@ -1433,8 +1431,7 @@
             with self.assertWarns(RuntimeWarning, msg='foobar'):
                 pass
         # Invalid keyword argument
-        with self.assertWarnsRegex(DeprecationWarning, 'foobar'), \
-             self.assertRaises(AssertionError):
+        with self.assertRaisesRegex(TypeError, 'foobar'):
             with self.assertWarns(RuntimeWarning, foobar=42):
                 pass
         # Failure when another warning is triggered
@@ -1475,7 +1472,7 @@
             self.assertWarnsRegex(RuntimeWarning, "o+",
                                   lambda: 0)
         # Failure when the function is None
-        with self.assertWarns(DeprecationWarning):
+        with self.assertRaises(TypeError):
             self.assertWarnsRegex(RuntimeWarning, "o+", None)
         # Failure when another warning is triggered
         with warnings.catch_warnings():
@@ -1518,8 +1515,7 @@
             with self.assertWarnsRegex(RuntimeWarning, 'o+', msg='foobar'):
                 pass
         # Invalid keyword argument
-        with self.assertWarnsRegex(DeprecationWarning, 'foobar'), \
-             self.assertRaises(AssertionError):
+        with self.assertRaisesRegex(TypeError, 'foobar'):
             with self.assertWarnsRegex(RuntimeWarning, 'o+', foobar=42):
                 pass
         # Failure when another warning is triggered
diff --git a/Misc/NEWS.d/next/Library/2018-08-02-14-43-42.bpo-34318.GneiXs.rst b/Misc/NEWS.d/next/Library/2018-08-02-14-43-42.bpo-34318.GneiXs.rst
new file mode 100644
index 0000000..4df4fe3
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-08-02-14-43-42.bpo-34318.GneiXs.rst
@@ -0,0 +1,7 @@
+:func:`~unittest.TestCase.assertRaises`,
+:func:`~unittest.TestCase.assertRaisesRegex`,
+:func:`~unittest.TestCase.assertWarns` and
+:func:`~unittest.TestCase.assertWarnsRegex` no longer success if the passed
+callable is None. They no longer ignore unknown keyword arguments in the
+context manager mode. A DeprecationWarning was raised in these cases
+since Python 3.5.
