Use new Nox (#6175)

diff --git a/noxfile.py b/noxfile.py
new file mode 100644
index 0000000..77ef2ce
--- /dev/null
+++ b/noxfile.py
@@ -0,0 +1,112 @@
+# Copyright 2016 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import
+import os
+
+# https://github.com/google/importlab/issues/25
+import nox  # pytype: disable=import-error
+
+
+def default(session):
+    """Default unit test session.
+
+    This is intended to be run **without** an interpreter set, so
+    that the current ``python`` (on the ``PATH``) or the version of
+    Python corresponding to the ``nox`` binary the ``PATH`` can
+    run the tests.
+    """
+    # Install all test dependencies, then install this package in-place.
+    session.install(
+        'mock',
+        'pytest',
+        'pytest-cov',
+        'grpcio >= 1.0.2',
+    )
+    session.install('-e', '.')
+
+    # Run py.test against the unit tests.
+    session.run(
+        'py.test',
+        '--quiet',
+        '--cov=google.api_core',
+        '--cov=tests.unit',
+        '--cov-append',
+        '--cov-config=.coveragerc',
+        '--cov-report=',
+        '--cov-fail-under=97',
+        os.path.join('tests', 'unit'),
+        *session.posargs
+    )
+
+
+@nox.session(python=['2.7', '3.5', '3.6', '3.7'])
+def unit(session):
+    """Run the unit test suite."""
+    default(session)
+
+
+@nox.session(python=['2.7', '3.5', '3.6', '3.7'])
+def unit_grpc_gcp(session):
+    """Run the unit test suite with grpcio-gcp installed."""
+
+    # Install grpcio-gcp
+    session.install('grpcio-gcp')
+
+    default(session)
+
+
+@nox.session(python='3.6')
+def lint(session):
+    """Run linters.
+
+    Returns a failure if the linters find linting errors or sufficiently
+    serious code quality issues.
+    """
+    session.install('flake8', 'flake8-import-order')
+    session.install('.')
+    session.run('flake8', 'google', 'tests')
+
+
+@nox.session(python='3.6')
+def lint_setup_py(session):
+    """Verify that setup.py is valid (including RST check)."""
+
+    session.install('docutils', 'Pygments')
+    session.run(
+        'python', 'setup.py', 'check', '--restructuredtext', '--strict')
+
+
+# No 2.7 due to https://github.com/google/importlab/issues/26.
+# No 3.7 because pytype supports up to 3.6 only.
+@nox.session(python='3.6')
+def pytype(session):
+  """Run type-checking."""
+  session.install('.',
+                  'grpcio >= 1.8.2',
+                  'grpcio-gcp >= 0.2.2',
+                  'pytype >= 2018.9.26')
+  session.run('pytype')
+
+
+@nox.session(python='3.6')
+def cover(session):
+    """Run the final coverage report.
+
+    This outputs the coverage report aggregating coverage from the unit
+    test runs (not system test runs), and then erases coverage data.
+    """
+    session.install('coverage', 'pytest-cov')
+    session.run('coverage', 'report', '--show-missing', '--fail-under=100')
+    session.run('coverage', 'erase')