diff --git a/tests/testhelpers.py b/tests/testhelpers.py
index d6bccb6..6902c60 100644
--- a/tests/testhelpers.py
+++ b/tests/testhelpers.py
@@ -182,7 +182,7 @@
         args = _Call(((1, 2, 3), {}))
         self.assertEqual(args, call(1, 2, 3))
         self.assertEqual(call(1, 2, 3), args)
-        self.assertTrue(call(1, 2, 3) in [args])
+        self.assertIn(call(1, 2, 3), [args])
 
 
     def test_call_ne(self):
@@ -864,7 +864,7 @@
         mock_property = foo.foo
 
         # no spec on properties
-        self.assertTrue(isinstance(mock_property, MagicMock))
+        self.assertIsInstance(mock_property, MagicMock)
         mock_property(1, 2, 3)
         mock_property.abc(4, 5, 6)
         mock_property.assert_called_once_with(1, 2, 3)
@@ -897,19 +897,19 @@
         mock(b=6)
 
         for kall in call(1, 2), call(a=3), call(3, 4), call(b=6):
-            self.assertTrue(kall in mock.call_args_list)
+            self.assertIn(kall, mock.call_args_list)
 
         calls = [call(a=3), call(3, 4)]
-        self.assertTrue(calls in mock.call_args_list)
+        self.assertIn(calls, mock.call_args_list)
         calls = [call(1, 2), call(a=3)]
-        self.assertTrue(calls in mock.call_args_list)
+        self.assertIn(calls, mock.call_args_list)
         calls = [call(3, 4), call(b=6)]
-        self.assertTrue(calls in mock.call_args_list)
+        self.assertIn(calls, mock.call_args_list)
         calls = [call(3, 4)]
-        self.assertTrue(calls in mock.call_args_list)
+        self.assertIn(calls, mock.call_args_list)
 
-        self.assertFalse(call('fish') in mock.call_args_list)
-        self.assertFalse([call('fish')] in mock.call_args_list)
+        self.assertNotIn(call('fish'), mock.call_args_list)
+        self.assertNotIn([call('fish')], mock.call_args_list)
 
 
     def test_call_list_str(self):
diff --git a/tests/testmagicmethods.py b/tests/testmagicmethods.py
index e66a2a8..fa46330 100644
--- a/tests/testmagicmethods.py
+++ b/tests/testmagicmethods.py
@@ -51,12 +51,12 @@
             return self, 'fish'
 
         mock.__getitem__ = f
-        self.assertFalse(mock.__getitem__ is f)
+        self.assertIsNot(mock.__getitem__, f)
         self.assertEqual(mock['foo'], (mock, 'fish'))
         self.assertEqual(mock.__getitem__('foo'), (mock, 'fish'))
 
         mock.__getitem__ = mock
-        self.assertTrue(mock.__getitem__ is mock)
+        self.assertIs(mock.__getitem__, mock)
 
 
     def test_magic_methods_isolated_between_mocks(self):
@@ -273,8 +273,8 @@
         self.assertEqual(len(mock), 6)
 
         mock.__contains__ = lambda s, o: o == 3
-        self.assertTrue(3 in mock)
-        self.assertFalse(6 in mock)
+        self.assertIn(3, mock)
+        self.assertNotIn(6, mock)
 
         mock.__iter__ = lambda s: iter('foobarbaz')
         self.assertEqual(list(mock), list('foobarbaz'))
diff --git a/tests/testmock.py b/tests/testmock.py
index 42824c5..d03da18 100644
--- a/tests/testmock.py
+++ b/tests/testmock.py
@@ -88,7 +88,7 @@
                           "method_calls not initialised correctly")
 
         # Can't use hasattr for this test as it always returns True on a mock
-        self.assertFalse('_items' in mock.__dict__,
+        self.assertNotIn('_items', mock.__dict__,
                          "default mock should not have '_items' attribute")
 
         self.assertIsNone(mock._mock_parent,
@@ -591,19 +591,19 @@
             pass
 
         mock = Mock(spec=X)
-        self.assertTrue(isinstance(mock, X))
+        self.assertIsInstance(mock, X)
 
         mock = Mock(spec=X())
-        self.assertTrue(isinstance(mock, X))
+        self.assertIsInstance(mock, X)
 
         self.assertIs(mock.__class__, X)
         self.assertEqual(Mock().__class__.__name__, 'Mock')
 
         mock = Mock(spec_set=X)
-        self.assertTrue(isinstance(mock, X))
+        self.assertIsInstance(mock, X)
 
         mock = Mock(spec_set=X())
-        self.assertTrue(isinstance(mock, X))
+        self.assertIsInstance(mock, X)
 
 
     def test_setting_attribute_with_spec_set(self):
diff --git a/tests/testsentinel.py b/tests/testsentinel.py
index 0c8074d..69b2042 100644
--- a/tests/testsentinel.py
+++ b/tests/testsentinel.py
@@ -22,7 +22,7 @@
 
 
     def testDEFAULT(self):
-        self.assertTrue(DEFAULT is sentinel.DEFAULT)
+        self.assertIs(DEFAULT, sentinel.DEFAULT)
 
     def testBases(self):
         # If this doesn't raise an AttributeError then help(mock) is broken
