diff --git a/Library/Homebrew/.simplecov b/Library/Homebrew/.simplecov
index d2e00cf46966c22409441d30e5e0e3997f5c6bd0..23e60faeb0f555043777d159e607ae508468573d 100755
--- a/Library/Homebrew/.simplecov
+++ b/Library/Homebrew/.simplecov
@@ -11,8 +11,6 @@ SimpleCov.start do
   # tests to be dropped. This causes random fluctuations in test coverage.
   merge_timeout 86400
 
-  add_filter "/Homebrew/cask/spec/"
-  add_filter "/Homebrew/cask/test/"
   add_filter "/Homebrew/compat/"
   add_filter "/Homebrew/dev-cmd/tests.rb"
   add_filter "/Homebrew/test/"
diff --git a/Library/Homebrew/cask/.simplecov b/Library/Homebrew/cask/.simplecov
deleted file mode 120000
index 75a078be4a317e40fd4e1ef8ee9aee06ce735616..0000000000000000000000000000000000000000
--- a/Library/Homebrew/cask/.simplecov
+++ /dev/null
@@ -1 +0,0 @@
-../.simplecov
\ No newline at end of file
diff --git a/Library/Homebrew/cask/cmd/brew-cask-tests.rb b/Library/Homebrew/cask/cmd/brew-cask-tests.rb
deleted file mode 100755
index a1006b7efbfae3cd6e65518257275efb0ee0fa36..0000000000000000000000000000000000000000
--- a/Library/Homebrew/cask/cmd/brew-cask-tests.rb
+++ /dev/null
@@ -1,33 +0,0 @@
-require "English"
-
-ENV["BUNDLE_GEMFILE"] = "#{HOMEBREW_LIBRARY_PATH}/cask/Gemfile"
-ENV["BUNDLE_PATH"] = "#{HOMEBREW_LIBRARY_PATH}/vendor/bundle"
-
-def run_tests(executable, files, args = [])
-  opts = []
-  opts << "--serialize-stdout" if ENV["CI"]
-
-  system "bundle", "exec", executable, *opts, "--", *args, "--", *files
-end
-
-cask_root = Pathname.new(__FILE__).realpath.parent.parent
-cask_root.cd do
-  ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "1"
-  ENV["HOMEBREW_NO_EMOJI"] = "1"
-  ENV.delete("HOMEBREW_CASK_OPTS")
-
-  Homebrew.install_gem_setup_path! "bundler"
-  unless quiet_system("bundle", "check")
-    system "bundle", "install"
-  end
-
-  if ARGV.flag?("--coverage")
-    ENV["HOMEBREW_TESTS_COVERAGE"] = "1"
-    upload_coverage = ENV["CODECOV_TOKEN"] || ENV["TRAVIS"]
-  end
-
-  if upload_coverage
-    puts "Submitting Codecov coverage..."
-    system "bundle", "exec", "spec/upload_coverage.rb"
-  end
-end
diff --git a/Library/Homebrew/cask/spec/upload_coverage.rb b/Library/Homebrew/cask/spec/upload_coverage.rb
deleted file mode 100755
index 06d38157dd6d0c2cef6eab8bf0808edd1edc9020..0000000000000000000000000000000000000000
--- a/Library/Homebrew/cask/spec/upload_coverage.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/usr/bin/env ruby
-require "simplecov"
-require "codecov"
-
-formatter = SimpleCov::Formatter::Codecov.new
-formatter.format SimpleCov::ResultMerger.merged_result
diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb
index 4616d770825ab44203e8754e039201f7d1619e9d..af414b1459854ccf545551f2dbf37d4f0b606963 100644
--- a/Library/Homebrew/test/spec_helper.rb
+++ b/Library/Homebrew/test/spec_helper.rb
@@ -1,4 +1,5 @@
 require "find"
+require "parallel_tests"
 require "pathname"
 require "rspec/its"
 require "rspec/wait"
@@ -6,6 +7,20 @@ require "set"
 
 if ENV["HOMEBREW_TESTS_COVERAGE"]
   require "simplecov"
+
+  if ENV["CODECOV_TOKEN"] || ENV["TRAVIS"]
+    require "codecov"
+
+    if ParallelTests.last_process?
+      at_exit do
+        ParallelTests.wait_for_other_processes_to_finish
+
+        puts "Sending coverage report to CodeCov 鈥�"
+        formatter = SimpleCov::Formatter::Codecov.new
+        formatter.format SimpleCov::ResultMerger.merged_result
+      end
+    end
+  end
 end
 
 $LOAD_PATH.unshift(File.expand_path("#{ENV["HOMEBREW_LIBRARY"]}/Homebrew"))