diff --git a/tools_webrtc/autoroller/unittests/roll_deps_test.py b/tools_webrtc/autoroller/unittests/roll_deps_test.py
index ccf042e..33efe09 100755
--- a/tools_webrtc/autoroller/unittests/roll_deps_test.py
+++ b/tools_webrtc/autoroller/unittests/roll_deps_test.py
@@ -24,6 +24,9 @@
   GetMatchingDepsEntries, ParseDepsDict, ParseLocalDepsFile, UpdateDepsFile, \
   ChromiumRevisionUpdate
 
+SRC_DIR = os.path.join(PARENT_DIR, os.pardir, os.pardir)
+sys.path.append(os.path.join(SRC_DIR, 'third_party', 'pymock'))
+import mock
 
 TEST_DATA_VARS = {
   'chromium_git': 'https://chromium.googlesource.com',
@@ -79,10 +82,6 @@
     return None, None
 
 
-def MuteCommandMock():
-  setattr(roll_deps, '_RunCommand', NullCmd())
-
-
 class TestRollChromiumRevision(unittest.TestCase):
   def setUp(self):
     self._output_dir = tempfile.mkdtemp()
@@ -94,16 +93,11 @@
     self._new_cr_depsfile = join('DEPS.chromium.new')
     self._webrtc_depsfile_android = join('DEPS.with_android_deps')
     self._new_cr_depsfile_android = join('DEPS.chromium.with_android_deps')
-
     self.fake = FakeCmd()
-    self.old_run_command = getattr(roll_deps, '_RunCommand')
-    setattr(roll_deps, '_RunCommand', self.fake)
 
   def tearDown(self):
     shutil.rmtree(self._output_dir, ignore_errors=True)
     self.assertEqual(self.fake.expectations, [])
-    setattr(roll_deps, '_RunCommand', self.old_run_command)
-
 
   def testVarLookup(self):
     local_scope = {'foo': 'wrong', 'vars': {'foo': 'bar'}}
@@ -135,10 +129,11 @@
     new_cr_deps = ParseDepsDict(new_cr_contents)
 
     changed_deps = CalculateChangedDeps(webrtc_deps, new_cr_deps)
-    UpdateDepsFile(self._webrtc_depsfile_android,
-                   NO_CHROMIUM_REVISION_UPDATE,
-                   changed_deps,
-                   new_cr_contents)
+    with mock.patch('roll_deps._RunCommand', NullCmd()):
+      UpdateDepsFile(self._webrtc_depsfile_android,
+                     NO_CHROMIUM_REVISION_UPDATE,
+                     changed_deps,
+                     new_cr_contents)
 
     with open(self._webrtc_depsfile_android) as deps_file:
       updated_contents = deps_file.read()
@@ -146,7 +141,6 @@
     return webrtc_contents, updated_contents
 
   def testUpdateAndroidGeneratedDeps(self):
-    MuteCommandMock()
     _, updated_contents = self._UpdateDepsSetup()
 
     changed = 'third_party/android_deps/libs/android_arch_core_common'
@@ -155,7 +149,6 @@
     self.assertTrue(changed_version in updated_contents)
 
   def testAddAndroidGeneratedDeps(self):
-    MuteCommandMock()
     webrtc_contents, updated_contents = self._UpdateDepsSetup()
 
     added = 'third_party/android_deps/libs/android_arch_lifecycle_common'
@@ -163,7 +156,6 @@
     self.assertTrue(added in updated_contents)
 
   def testRemoveAndroidGeneratedDeps(self):
-    MuteCommandMock()
     webrtc_contents, updated_contents = self._UpdateDepsSetup()
 
     removed = 'third_party/android_deps/libs/android_arch_lifecycle_runtime'
@@ -198,11 +190,14 @@
 
 
   def testCalculateChangedDeps(self):
-    _SetupGitLsRemoteCall(self.fake,
-        'https://chromium.googlesource.com/chromium/src/build', BUILD_NEW_REV)
     webrtc_deps = ParseLocalDepsFile(self._webrtc_depsfile)
     new_cr_deps = ParseLocalDepsFile(self._new_cr_depsfile)
-    changed_deps = CalculateChangedDeps(webrtc_deps, new_cr_deps)
+    with mock.patch('roll_deps._RunCommand', self.fake):
+      _SetupGitLsRemoteCall(
+          self.fake, 'https://chromium.googlesource.com/chromium/src/build',
+          BUILD_NEW_REV)
+      changed_deps = CalculateChangedDeps(webrtc_deps, new_cr_deps)
+
     self.assertEquals(len(changed_deps), 3)
     self.assertEquals(changed_deps[0].path, 'src/build')
     self.assertEquals(changed_deps[0].current_rev, BUILD_OLD_REV)
@@ -261,7 +256,7 @@
     self.assertEquals(other_paths, ['src/third_party/xstream',
                                     'src/buildtools'])
 
-  def testExpectedDepsIsNot(self):
+  def testExpectedDepsIsNotReportedMissing(self):
     """Some deps musn't be seen as missing, even if absent from Chromium."""
     webrtc_deps = ParseLocalDepsFile(self._webrtc_depsfile)
     new_cr_deps = ParseLocalDepsFile(self._new_cr_depsfile_android)
@@ -278,16 +273,18 @@
     added_paths, _ = FindAddedDeps(webrtc_deps, new_cr_deps)
     removed_paths, _ = FindRemovedDeps(webrtc_deps, new_cr_deps)
 
-    # We don't really care, but it's needed to construct the message.
-    self.fake.AddExpectation(['git', 'config', 'user.email'],
-                             _returns=('nobody@nowhere.no', None),
-                             _ignores=['working_dir'])
-
     current_commit_pos = 'cafe'
     new_commit_pos = 'f00d'
-    commit_msg = GenerateCommitMessage(NO_CHROMIUM_REVISION_UPDATE,
-                                       current_commit_pos, new_commit_pos,
-                                       changed_deps, added_paths, removed_paths)
+
+    with mock.patch('roll_deps._RunCommand', self.fake):
+      # We don't really care, but it's needed to construct the message.
+      self.fake.AddExpectation(['git', 'config', 'user.email'],
+                               _returns=('nobody@nowhere.no', None),
+                               _ignores=['working_dir'])
+
+      commit_msg = GenerateCommitMessage(
+          NO_CHROMIUM_REVISION_UPDATE, current_commit_pos, new_commit_pos,
+          changed_deps, added_paths, removed_paths)
 
     return [l.strip() for l in commit_msg.split('\n')]
 
