diff --git a/pylint/checkers/similar.py b/pylint/checkers/similar.py
index 5a294e9..c65b1c8 100644
--- a/pylint/checkers/similar.py
+++ b/pylint/checkers/similar.py
@@ -49,7 +49,6 @@
 import sys
 from collections import defaultdict
 from getopt import getopt
-from io import TextIOWrapper
 from itertools import chain, groupby
 from typing import (
     Any,
@@ -61,6 +60,7 @@
     NamedTuple,
     NewType,
     Set,
+    TextIO,
     Tuple,
 )
 
@@ -368,9 +368,7 @@
         self.ignore_signatures = ignore_signatures
         self.linesets: List["LineSet"] = []
 
-    def append_stream(
-        self, streamid: str, stream: TextIOWrapper, encoding=None
-    ) -> None:
+    def append_stream(self, streamid: str, stream: TextIO, encoding=None) -> None:
         """append a file to search for similarities"""
         if encoding is None:
             readlines = stream.readlines
diff --git a/pylint/lint/utils.py b/pylint/lint/utils.py
index b1f8edf..280b144 100644
--- a/pylint/lint/utils.py
+++ b/pylint/lint/utils.py
@@ -5,7 +5,7 @@
 import sys
 import traceback
 from datetime import datetime
-from pathlib import Path
+from pathlib import Path, PosixPath
 from typing import Union
 
 from pylint.config import PYLINT_HOME
@@ -17,7 +17,7 @@
 
 
 def prepare_crash_report(
-    ex: Exception, filepath: str, crash_file_path: Union[Path, str]
+    ex: Exception, filepath: PosixPath, crash_file_path: Union[Path, str]
 ) -> Path:
     issue_template_path = (
         Path(PYLINT_HOME) / datetime.now().strftime(str(crash_file_path))
@@ -63,7 +63,7 @@
     return issue_template_path
 
 
-def get_fatal_error_message(filepath: str, issue_template_path: Path) -> str:
+def get_fatal_error_message(filepath: str, issue_template_path: str) -> str:
     return (
         f"Fatal error while checking '{filepath}'. "
         f"Please open an issue in our bug tracker so we address this. "
diff --git a/pylint/message/message_definition.py b/pylint/message/message_definition.py
index f7f6805..30dacb3 100644
--- a/pylint/message/message_definition.py
+++ b/pylint/message/message_definition.py
@@ -18,8 +18,8 @@
         description: str,
         symbol: str,
         scope: str,
-        minversion: Optional[Tuple[int, int, int, str, int]] = None,
-        maxversion: Optional[Tuple[int, int, int, str, int]] = None,
+        minversion: Optional[Tuple[int, int]] = None,
+        maxversion: Optional[Tuple[int, int]] = None,
         old_names: List[Tuple[str, str]] = None,
     ):
         self.checker_name = checker.name
diff --git a/pylint/testutils/output_line.py b/pylint/testutils/output_line.py
index 9d38b68..4fb71b4 100644
--- a/pylint/testutils/output_line.py
+++ b/pylint/testutils/output_line.py
@@ -58,10 +58,10 @@
 class OutputLine(NamedTuple):
     symbol: str
     lineno: int
-    column: int
+    column: str
     object: Any
     msg: str
-    confidence: str
+    confidence: interfaces.Confidence
 
     @classmethod
     def from_msg(cls, msg):
diff --git a/requirements_test_min.txt b/requirements_test_min.txt
index 40b8879..fa6c3f8 100644
--- a/requirements_test_min.txt
+++ b/requirements_test_min.txt
@@ -2,3 +2,4 @@
 astroid==2.7.3  # Pinned to a specific version for tests
 pytest~=6.2
 pytest-benchmark~=3.4
+mypy_extensions==0.4.3
diff --git a/tests/checkers/unittest_base.py b/tests/checkers/unittest_base.py
index 6a20db9..a7ffa3c 100644
--- a/tests/checkers/unittest_base.py
+++ b/tests/checkers/unittest_base.py
@@ -39,24 +39,24 @@
 class TestDocstring(CheckerTestCase):
     CHECKER_CLASS: Type = base.DocStringChecker
 
-    def test_missing_docstring_module(self):
+    def test_missing_docstring_module(self) -> None:
         module = astroid.parse("something")
         message = Message("missing-module-docstring", node=module)
         with self.assertAddsMessages(message):
             self.checker.visit_module(module)
 
-    def test_missing_docstring_empty_module(self):
+    def test_missing_docstring_empty_module(self) -> None:
         module = astroid.parse("")
         with self.assertNoMessages():
             self.checker.visit_module(module)
 
-    def test_empty_docstring_module(self):
+    def test_empty_docstring_module(self) -> None:
         module = astroid.parse("''''''")
         message = Message("empty-docstring", node=module, args=("module",))
         with self.assertAddsMessages(message):
             self.checker.visit_module(module)
 
-    def test_empty_docstring_function(self):
+    def test_empty_docstring_function(self) -> None:
         func = astroid.extract_node(
             """
         def func(tion):
@@ -67,7 +67,7 @@
             self.checker.visit_functiondef(func)
 
     @set_config(docstring_min_length=2)
-    def test_short_function_no_docstring(self):
+    def test_short_function_no_docstring(self) -> None:
         func = astroid.extract_node(
             """
         def func(tion):
@@ -77,7 +77,7 @@
             self.checker.visit_functiondef(func)
 
     @set_config(docstring_min_length=2)
-    def test_long_function_no_docstring(self):
+    def test_long_function_no_docstring(self) -> None:
         func = astroid.extract_node(
             """
         def func(tion):
@@ -90,7 +90,7 @@
             self.checker.visit_functiondef(func)
 
     @set_config(docstring_min_length=2)
-    def test_long_function_nested_statements_no_docstring(self):
+    def test_long_function_nested_statements_no_docstring(self) -> None:
         func = astroid.extract_node(
             """
         def func(tion):
@@ -105,7 +105,7 @@
             self.checker.visit_functiondef(func)
 
     @set_config(docstring_min_length=2)
-    def test_function_no_docstring_by_name(self):
+    def test_function_no_docstring_by_name(self) -> None:
         func = astroid.extract_node(
             """
         def __fun__(tion):
@@ -114,7 +114,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(func)
 
-    def test_class_no_docstring(self):
+    def test_class_no_docstring(self) -> None:
         klass = astroid.extract_node(
             """
         class Klass(object):
@@ -124,7 +124,7 @@
         with self.assertAddsMessages(message):
             self.checker.visit_classdef(klass)
 
-    def test_inner_function_no_docstring(self):
+    def test_inner_function_no_docstring(self) -> None:
         func = astroid.extract_node(
             """
         def func(tion):
@@ -146,7 +146,7 @@
         attr_rgx=re.compile("[A-Z]+"),
         property_classes=("abc.abstractproperty", ".custom_prop"),
     )
-    def test_property_names(self):
+    def test_property_names(self) -> None:
         # If a method is annotated with @property, its name should
         # match the attr regex. Since by default the attribute regex is the same
         # as the method regex, we override it here.
@@ -189,7 +189,7 @@
             self.checker.visit_functiondef(methods[1])
 
     @set_config(attr_rgx=re.compile("[A-Z]+"))
-    def test_property_setters(self):
+    def test_property_setters(self) -> None:
         method = astroid.extract_node(
             """
         class FooClass(object):
@@ -204,7 +204,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(method)
 
-    def test_module_level_names(self):
+    def test_module_level_names(self) -> None:
         assign = astroid.extract_node(
             """
         import collections
@@ -289,7 +289,7 @@
     MULTI_STYLE_RE = re.compile("(?:(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$")
 
     @set_config(class_rgx=MULTI_STYLE_RE)
-    def test_multi_name_detection_majority(self):
+    def test_multi_name_detection_majority(self) -> None:
         classes = astroid.extract_node(
             """
         class classb(object): #@
@@ -317,7 +317,7 @@
                 self.checker.leave_module(cls.root)
 
     @set_config(class_rgx=MULTI_STYLE_RE)
-    def test_multi_name_detection_first_invalid(self):
+    def test_multi_name_detection_first_invalid(self) -> None:
         classes = astroid.extract_node(
             """
         class class_a(object): #@
@@ -391,7 +391,7 @@
     @set_config(
         function_rgx=re.compile("(?:(?P<ignore>FOO)|(?P<UP>[A-Z]+)|(?P<down>[a-z]+))$")
     )
-    def test_multi_name_detection_exempt(self):
+    def test_multi_name_detection_exempt(self) -> None:
         function_defs = astroid.extract_node(
             """
         def FOO(): #@
@@ -424,7 +424,7 @@
 class TestComparison(CheckerTestCase):
     CHECKER_CLASS = base.ComparisonChecker
 
-    def test_comparison(self):
+    def test_comparison(self) -> None:
         node = astroid.extract_node("foo == True")
         message = Message(
             "singleton-comparison",
@@ -545,15 +545,19 @@
         SNAKE_CASE_NAMES | CAMEL_CASE_NAMES | UPPER_CASE_NAMES | PASCAL_CASE_NAMES
     )
 
-    def _test_name_is_correct_for_all_name_types(self, naming_style, name):
+    def _test_name_is_correct_for_all_name_types(
+        self, naming_style: Type[base.NamingStyle], name: str
+    ) -> None:
         for name_type in base.KNOWN_NAME_TYPES:
             self._test_is_correct(naming_style, name, name_type)
 
-    def _test_name_is_incorrect_for_all_name_types(self, naming_style, name):
+    def _test_name_is_incorrect_for_all_name_types(
+        self, naming_style: Type[base.NamingStyle], name: str
+    ) -> None:
         for name_type in base.KNOWN_NAME_TYPES:
             self._test_is_incorrect(naming_style, name, name_type)
 
-    def _test_should_always_pass(self, naming_style):
+    def _test_should_always_pass(self, naming_style: Type[base.NamingStyle]) -> None:
         always_pass_data = [
             ("__add__", "method"),
             ("__set_name__", "method"),
@@ -564,18 +568,22 @@
             self._test_is_correct(naming_style, name, name_type)
 
     @staticmethod
-    def _test_is_correct(naming_style, name, name_type):
+    def _test_is_correct(
+        naming_style: Type[base.NamingStyle], name: str, name_type: str
+    ) -> None:
         rgx = naming_style.get_regex(name_type)
         fail = f"{name!r} does not match pattern {rgx!r} (style: {naming_style}, type: {name_type})"
         assert rgx.match(name), fail
 
     @staticmethod
-    def _test_is_incorrect(naming_style, name, name_type):
+    def _test_is_incorrect(
+        naming_style: Type[base.NamingStyle], name: str, name_type: str
+    ) -> None:
         rgx = naming_style.get_regex(name_type)
         fail = f"{name!r} not match pattern {rgx!r} (style: {naming_style}, type: {name_type})"
         assert not rgx.match(name), fail
 
-    def test_snake_case(self):
+    def test_snake_case(self) -> None:
         naming_style = base.SnakeCaseStyle
 
         for name in self.SNAKE_CASE_NAMES:
@@ -585,7 +593,7 @@
 
         self._test_should_always_pass(naming_style)
 
-    def test_camel_case(self):
+    def test_camel_case(self) -> None:
         naming_style = base.CamelCaseStyle
 
         for name in self.CAMEL_CASE_NAMES:
@@ -595,7 +603,7 @@
 
         self._test_should_always_pass(naming_style)
 
-    def test_upper_case(self):
+    def test_upper_case(self) -> None:
         naming_style = base.UpperCaseStyle
 
         for name in self.UPPER_CASE_NAMES:
@@ -606,7 +614,7 @@
 
         self._test_should_always_pass(naming_style)
 
-    def test_pascal_case(self):
+    def test_pascal_case(self) -> None:
         naming_style = base.PascalCaseStyle
 
         for name in self.PASCAL_CASE_NAMES:
@@ -618,7 +626,7 @@
 
 
 class TestBaseChecker(unittest.TestCase):
-    def test_doc(self):
+    def test_doc(self) -> None:
         class OtherBasicChecker(BaseChecker):
             name = "basic"
             msgs = {
diff --git a/tests/checkers/unittest_classes.py b/tests/checkers/unittest_classes.py
index 1f60d1b..13bcc5f 100644
--- a/tests/checkers/unittest_classes.py
+++ b/tests/checkers/unittest_classes.py
@@ -26,7 +26,7 @@
 
     CHECKER_CLASS = classes.ClassChecker
 
-    def test_bitbucket_issue_164(self):
+    def test_bitbucket_issue_164(self) -> None:
         """Issue 164 report a false negative for access-member-before-definition"""
         n1, n2 = astroid.extract_node(
             """
@@ -43,7 +43,7 @@
             self.walk(n1.root())
 
     @set_config(exclude_protected=("_meta", "_manager"))
-    def test_exclude_protected(self):
+    def test_exclude_protected(self) -> None:
         """Test that exclude-protected can be used to
         exclude names from protected-access warning.
         """
@@ -67,7 +67,7 @@
         ):
             self.walk(node.root())
 
-    def test_regression_non_parent_init_called_tracemalloc(self):
+    def test_regression_non_parent_init_called_tracemalloc(self) -> None:
         # This used to raise a non-parent-init-called on Pylint 1.3
         # See issue https://bitbucket.org/logilab/pylint/issue/308/
         # for reference.
@@ -82,7 +82,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_super_init_not_called_regression(self):
+    def test_super_init_not_called_regression(self) -> None:
         # This should not emit a super-init-not-called
         # warning. It previously did this, because
         # ``next(node.infer())`` was used in that checker's
@@ -100,7 +100,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_uninferable_attribute(self):
+    def test_uninferable_attribute(self) -> None:
         """Make sure protect-access doesn't raise an exception Uninferable attributes"""
 
         node = astroid.extract_node(
@@ -121,7 +121,7 @@
             self.checker.visit_attribute(node.value)
 
     @set_config(check_protected_access_in_special_methods=True)
-    def test_check_protected_access_in_special_methods(self):
+    def test_check_protected_access_in_special_methods(self) -> None:
         """Test that check-protected-access-in-special-methods can be used to
         trigger protected-access message emission for single underscore prefixed names
         inside special methods
@@ -170,7 +170,7 @@
             self.walk(node.root())
 
     @set_config(check_protected_access_in_special_methods=False)
-    def test_check_protected_access_in_special_methods_deact(self):
+    def test_check_protected_access_in_special_methods_deact(self) -> None:
         """Test that when check-protected-access-in-special-methods is False (default)
         no protected-access message emission for single underscore prefixed names
         inside special methods occur
@@ -215,7 +215,7 @@
         ):
             self.walk(node.root())
 
-    def test_private_attribute_hides_method(self):
+    def test_private_attribute_hides_method(self) -> None:
         node = astroid.extract_node(
             """
             class Parent:
@@ -230,7 +230,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_protected_attribute_hides_method(self):
+    def test_protected_attribute_hides_method(self) -> None:
         node = astroid.extract_node(
             """
             class Parent:
diff --git a/tests/checkers/unittest_deprecated.py b/tests/checkers/unittest_deprecated.py
index f0142a1..686fb0c 100644
--- a/tests/checkers/unittest_deprecated.py
+++ b/tests/checkers/unittest_deprecated.py
@@ -1,3 +1,5 @@
+from typing import List, Optional, Set, Tuple, Union
+
 import astroid
 
 from pylint.checkers import BaseChecker, DeprecatedMixin
@@ -9,16 +11,20 @@
     __implements__ = (IAstroidChecker,)
     name = "deprecated"
 
-    def deprecated_methods(self):
+    def deprecated_methods(self) -> Set[str]:
         return {"deprecated_func", ".Deprecated.deprecated_method"}
 
-    def deprecated_modules(self):
+    def deprecated_modules(self) -> Set[str]:
         return {"deprecated_module"}
 
-    def deprecated_classes(self, module):
+    def deprecated_classes(self, module: str) -> List[str]:
         return ["DeprecatedClass"] if module == "deprecated" else []
 
-    def deprecated_arguments(self, method):
+    def deprecated_arguments(
+        self, method: str
+    ) -> Union[
+        Tuple[Tuple[Optional[int], str], ...], Tuple[Tuple[int, str], Tuple[int, str]]
+    ]:
         if method == "myfunction1":
             # def myfunction1(arg1, deprecated_arg1='spam')
             return ((1, "deprecated_arg1"),)
@@ -42,14 +48,14 @@
             return ((0, "deprecated_arg"),)
         return ()
 
-    def deprecated_decorators(self):
+    def deprecated_decorators(self) -> Set[str]:
         return {".deprecated_decorator"}
 
 
 class TestDeprecatedChecker(CheckerTestCase):
     CHECKER_CLASS = _DeprecatedChecker
 
-    def test_deprecated_function(self):
+    def test_deprecated_function(self) -> None:
         # Tests detecting deprecated function
         node = astroid.extract_node(
             """
@@ -69,7 +75,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_deprecated_method(self):
+    def test_deprecated_method(self) -> None:
         # Tests detecting deprecated method
         node = astroid.extract_node(
             """
@@ -91,7 +97,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_deprecated_method_alias(self):
+    def test_deprecated_method_alias(self) -> None:
         # Tests detecting deprecated method defined as alias
         # to existing method
         node = astroid.extract_node(
@@ -116,7 +122,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_no_message(self):
+    def test_no_message(self) -> None:
         # Tests not raising error when no deprecated functions/methods are present.
         node = astroid.extract_node(
             """
@@ -135,7 +141,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_function_deprecated_arg(self):
+    def test_function_deprecated_arg(self) -> None:
         # Tests raising error when calling function with deprecated argument
         node = astroid.extract_node(
             """
@@ -155,7 +161,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_function_deprecated_kwarg(self):
+    def test_function_deprecated_kwarg(self) -> None:
         # Tests raising error when calling function with deprecated keyword argument
         node = astroid.extract_node(
             """
@@ -175,7 +181,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_function_deprecated_not_used(self):
+    def test_function_deprecated_not_used(self) -> None:
         # Tests raising error when calling function without deprecated argument
         node = astroid.extract_node(
             """
@@ -188,7 +194,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_function_deprecated_kwarg_only(self):
+    def test_function_deprecated_kwarg_only(self) -> None:
         # Tests raising error when calling function with deprecated keyword only argument
         node = astroid.extract_node(
             """
@@ -208,7 +214,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_method_deprecated_arg(self):
+    def test_method_deprecated_arg(self) -> None:
         # Tests raising error when calling method with deprecated argument
         node = astroid.extract_node(
             """
@@ -229,7 +235,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_method_deprecated_kwarg(self):
+    def test_method_deprecated_kwarg(self) -> None:
         # Tests raising error when calling method with deprecated keyword argument
         node = astroid.extract_node(
             """
@@ -250,7 +256,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_method_deprecated_not_used(self):
+    def test_method_deprecated_not_used(self) -> None:
         # Tests raising error when calling method without deprecated argument
         node = astroid.extract_node(
             """
@@ -264,7 +270,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_method_deprecated_kwarg_only(self):
+    def test_method_deprecated_kwarg_only(self) -> None:
         # Tests raising error when calling method with deprecated keyword only argument
         node = astroid.extract_node(
             """
@@ -285,7 +291,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_function_deprecated_arg_kwargs(self):
+    def test_function_deprecated_arg_kwargs(self) -> None:
         # Tests raising error when calling function with deprecated argument
         # and keyword argument
         node = astroid.extract_node(
@@ -312,7 +318,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_function_deprecated_kwarg_kwarg(self):
+    def test_function_deprecated_kwarg_kwarg(self) -> None:
         # Tests raising error when calling function with deprecated keyword arguments
         node = astroid.extract_node(
             """
@@ -338,7 +344,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_method_deprecated_arg_kwargs(self):
+    def test_method_deprecated_arg_kwargs(self) -> None:
         # Tests raising error when calling method with deprecated argument
         # and keyword argument
         node = astroid.extract_node(
@@ -366,7 +372,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_method_deprecated_kwarg_kwarg(self):
+    def test_method_deprecated_kwarg_kwarg(self) -> None:
         # Tests raising error when calling method with deprecated keyword arguments
         node = astroid.extract_node(
             """
@@ -393,7 +399,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_class_deprecated_arguments(self):
+    def test_class_deprecated_arguments(self) -> None:
 
         node = astroid.extract_node(
             """
@@ -414,7 +420,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_deprecated_module(self):
+    def test_deprecated_module(self) -> None:
         # Tests detecting deprecated module
         node = astroid.extract_node(
             """
@@ -431,7 +437,7 @@
         ):
             self.checker.visit_import(node)
 
-    def test_deprecated_module_from(self):
+    def test_deprecated_module_from(self) -> None:
         # Tests detecting deprecated module
         node = astroid.extract_node(
             """
@@ -448,7 +454,7 @@
         ):
             self.checker.visit_importfrom(node)
 
-    def test_deprecated_class_import_from(self):
+    def test_deprecated_class_import_from(self) -> None:
         # Tests detecting deprecated class via import from
         node = astroid.extract_node(
             """
@@ -465,7 +471,7 @@
         ):
             self.checker.visit_importfrom(node)
 
-    def test_deprecated_class_import(self):
+    def test_deprecated_class_import(self) -> None:
         # Tests detecting deprecated class via import
         node = astroid.extract_node(
             """
@@ -482,7 +488,7 @@
         ):
             self.checker.visit_import(node)
 
-    def test_deprecated_class_call(self):
+    def test_deprecated_class_call(self) -> None:
         # Tests detecting deprecated class via call
         node = astroid.extract_node(
             """
@@ -500,7 +506,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_deprecated_decorator(self):
+    def test_deprecated_decorator(self) -> None:
         # Tests detecting deprecated decorator
         node = astroid.extract_node(
             """
@@ -524,7 +530,7 @@
         ):
             self.checker.visit_decorators(node)
 
-    def test_deprecated_decorator_with_arguments(self):
+    def test_deprecated_decorator_with_arguments(self) -> None:
         # Tests detecting deprecated decorator with arguments
         node = astroid.extract_node(
             """
diff --git a/tests/checkers/unittest_design.py b/tests/checkers/unittest_design.py
index cb2d22f..d65eba6 100644
--- a/tests/checkers/unittest_design.py
+++ b/tests/checkers/unittest_design.py
@@ -20,7 +20,7 @@
         ignored_parents=(".Dddd",),
         max_parents=1,
     )
-    def test_too_many_ancestors_ignored_parents_are_skipped(self):
+    def test_too_many_ancestors_ignored_parents_are_skipped(self) -> None:
         """Make sure that classes listed in ``ignored-parents`` aren't counted
         by the too-many-ancestors message.
         """
diff --git a/tests/checkers/unittest_exceptions.py b/tests/checkers/unittest_exceptions.py
index 4a8ffc8..fe449d8 100644
--- a/tests/checkers/unittest_exceptions.py
+++ b/tests/checkers/unittest_exceptions.py
@@ -30,13 +30,13 @@
     # and `raise (Error, ...)` will be converted to
     # `raise Error(...)`, so it beats the purpose of the test.
 
-    def test_raising_bad_type_python3(self):
+    def test_raising_bad_type_python3(self) -> None:
         node = astroid.extract_node("raise (ZeroDivisionError, None)  #@")
         message = Message("raising-bad-type", node=node, args="tuple")
         with self.assertAddsMessages(message):
             self.checker.visit_raise(node)
 
-    def test_bad_exception_context_function(self):
+    def test_bad_exception_context_function(self) -> None:
         node = astroid.extract_node(
             """
         def function():
diff --git a/tests/checkers/unittest_format.py b/tests/checkers/unittest_format.py
index 658a7e3..4023207 100644
--- a/tests/checkers/unittest_format.py
+++ b/tests/checkers/unittest_format.py
@@ -31,6 +31,7 @@
 import os
 import tempfile
 import tokenize
+from typing import Any
 
 import astroid
 
@@ -42,7 +43,7 @@
 class TestMultiStatementLine(CheckerTestCase):
     CHECKER_CLASS = FormatChecker
 
-    def testSingleLineIfStmts(self):
+    def testSingleLineIfStmts(self) -> None:
         stmt = astroid.extract_node(
             """
         if True: pass  #@
@@ -64,7 +65,7 @@
         with self.assertAddsMessages(Message("multiple-statements", node=stmt.body[0])):
             self.visitFirst(stmt)
 
-    def testSingleLineClassStmts(self):
+    def testSingleLineClassStmts(self) -> None:
         stmt = astroid.extract_node(
             """
         class MyError(Exception): pass  #@
@@ -101,7 +102,7 @@
         with self.assertAddsMessages(Message("multiple-statements", node=stmt.body[0])):
             self.visitFirst(stmt)
 
-    def testTryExceptFinallyNoMultipleStatement(self):
+    def testTryExceptFinallyNoMultipleStatement(self) -> None:
         tree = astroid.extract_node(
             """
         try:  #@
@@ -114,11 +115,11 @@
         with self.assertNoMessages():
             self.visitFirst(tree)
 
-    def visitFirst(self, tree):
+    def visitFirst(self, tree: Any) -> None:
         self.checker.process_tokens([])
         self.checker.visit_default(tree.body[0])
 
-    def test_ellipsis_is_ignored(self):
+    def test_ellipsis_is_ignored(self) -> None:
         code = """
         from typing import overload
         @overload
@@ -139,7 +140,7 @@
 class TestSuperfluousParentheses(CheckerTestCase):
     CHECKER_CLASS = FormatChecker
 
-    def testCheckKeywordParensHandlesValidCases(self):
+    def testCheckKeywordParensHandlesValidCases(self) -> None:
         cases = [
             "if foo:",
             "if foo():",
@@ -160,7 +161,7 @@
             for code in cases:
                 self.checker._check_keyword_parentheses(_tokenize_str(code), 0)
 
-    def testCheckKeywordParensHandlesUnnecessaryParens(self):
+    def testCheckKeywordParensHandlesUnnecessaryParens(self) -> None:
         cases = [
             (Message("superfluous-parens", line=1, args="if"), "if (foo):", 0),
             (Message("superfluous-parens", line=1, args="if"), "if ((foo, bar)):", 0),
@@ -184,7 +185,7 @@
             with self.assertAddsMessages(msg):
                 self.checker._check_keyword_parentheses(_tokenize_str(code), offset)
 
-    def testNoSuperfluousParensWalrusOperatorIf(self):
+    def testNoSuperfluousParensWalrusOperatorIf(self) -> None:
         """Parenthesis change the meaning of assignment in the walrus operator
         and so are not always superfluous:"""
         cases = [
@@ -195,7 +196,7 @@
             with self.assertNoMessages():
                 self.checker.process_tokens(_tokenize_str(code))
 
-    def testPositiveSuperfluousParensWalrusOperatorIf(self):
+    def testPositiveSuperfluousParensWalrusOperatorIf(self) -> None:
         """Test positive superfluous parens cases with the walrus operator"""
         cases = [
             (Message("superfluous-parens", line=1, args="if"), "if ((x := y)):\n"),
@@ -205,7 +206,7 @@
             with self.assertAddsMessages(msg):
                 self.checker.process_tokens(_tokenize_str(code))
 
-    def testCheckIfArgsAreNotUnicode(self):
+    def testCheckIfArgsAreNotUnicode(self) -> None:
         cases = [("if (foo):", 0), ("assert (1 == 1)", 0)]
 
         for code, offset in cases:
@@ -213,7 +214,7 @@
             got = self.linter.release_messages()
             assert isinstance(got[-1].args, str)
 
-    def testFuturePrintStatementWithoutParensWarning(self):
+    def testFuturePrintStatementWithoutParensWarning(self) -> None:
         code = """from __future__ import print_function
 print('Hello world!')
 """
@@ -222,7 +223,7 @@
             self.checker.process_module(tree)
             self.checker.process_tokens(_tokenize_str(code))
 
-    def testKeywordParensFalsePositive(self):
+    def testKeywordParensFalsePositive(self) -> None:
         code = "if 'bar' in (DICT or {}):"
         with self.assertNoMessages():
             self.checker._check_keyword_parentheses(_tokenize_str(code), start=2)
@@ -231,7 +232,7 @@
 class TestCheckSpace(CheckerTestCase):
     CHECKER_CLASS = FormatChecker
 
-    def test_encoding_token(self):
+    def test_encoding_token(self) -> None:
         """Make sure the encoding token doesn't change the checker's behavior
 
         _tokenize_str doesn't produce an encoding token, but
@@ -247,7 +248,7 @@
             self.checker.process_tokens(tokens)
 
 
-def test_disable_global_option_end_of_line():
+def test_disable_global_option_end_of_line() -> None:
     """
     Test for issue with disabling tokenizer messages
     that extend beyond the scope of the ast tokens
diff --git a/tests/checkers/unittest_imports.py b/tests/checkers/unittest_imports.py
index 8521779..fe99a49 100644
--- a/tests/checkers/unittest_imports.py
+++ b/tests/checkers/unittest_imports.py
@@ -34,7 +34,7 @@
     CHECKER_CLASS = imports.ImportsChecker
 
     @set_config(allow_any_import_level=("astroid",))
-    def test_import_outside_toplevel(self):
+    def test_import_outside_toplevel(self) -> None:
         node = astroid.extract_node(
             """
         def f():
@@ -60,7 +60,7 @@
     @set_config(
         ignored_modules=("external_module", "fake_module.submodule", "foo", "bar")
     )
-    def test_import_error_skipped(self):
+    def test_import_error_skipped(self) -> None:
         """Make sure that imports do not emit an 'import-error' when the
         module is configured to be ignored."""
 
@@ -122,7 +122,7 @@
         with self.assertNoMessages():
             self.checker.visit_import(node)
 
-    def test_reimported_same_line(self):
+    def test_reimported_same_line(self) -> None:
         """
         Test that duplicate imports on single line raise 'reimported'.
         """
@@ -131,7 +131,7 @@
         with self.assertAddsMessages(msg):
             self.checker.visit_importfrom(node)
 
-    def test_relative_beyond_top_level(self):
+    def test_relative_beyond_top_level(self) -> None:
         module = astroid.MANAGER.ast_from_module_name("beyond_top", REGR_DATA)
         import_from = module.body[0]
 
@@ -143,14 +143,14 @@
         with self.assertNoMessages():
             self.checker.visit_importfrom(module.body[2].body[0])
 
-    def test_wildcard_import_init(self):
+    def test_wildcard_import_init(self) -> None:
         module = astroid.MANAGER.ast_from_module_name("init_wildcard", REGR_DATA)
         import_from = module.body[0]
 
         with self.assertNoMessages():
             self.checker.visit_importfrom(import_from)
 
-    def test_wildcard_import_non_init(self):
+    def test_wildcard_import_non_init(self) -> None:
         module = astroid.MANAGER.ast_from_module_name("wildcard", REGR_DATA)
         import_from = module.body[0]
 
diff --git a/tests/checkers/unittest_logging.py b/tests/checkers/unittest_logging.py
index 551d6ef..1cf6f6f 100644
--- a/tests/checkers/unittest_logging.py
+++ b/tests/checkers/unittest_logging.py
@@ -15,6 +15,7 @@
 
 """Unittest for the logging checker."""
 import sys
+from typing import Optional, Tuple
 
 import astroid
 import pytest
@@ -27,7 +28,7 @@
 class TestLoggingModuleDetection(CheckerTestCase):
     CHECKER_CLASS = logging.LoggingChecker
 
-    def test_detects_standard_logging_module(self):
+    def test_detects_standard_logging_module(self) -> None:
         stmts = astroid.extract_node(
             """
         import logging #@
@@ -41,7 +42,7 @@
         ):
             self.checker.visit_call(stmts[1])
 
-    def test_dont_crash_on_invalid_format_string(self):
+    def test_dont_crash_on_invalid_format_string(self) -> None:
         node = astroid.parse(
             """
         import logging
@@ -50,7 +51,7 @@
         )
         self.walk(node)
 
-    def test_detects_renamed_standard_logging_module(self):
+    def test_detects_renamed_standard_logging_module(self) -> None:
         stmts = astroid.extract_node(
             """
         import logging as blogging #@
@@ -65,7 +66,7 @@
             self.checker.visit_call(stmts[1])
 
     @set_config(logging_modules=["logging", "my.logging"])
-    def test_nonstandard_logging_module(self):
+    def test_nonstandard_logging_module(self) -> None:
         stmts = astroid.extract_node(
             """
         from my import logging as blogging #@
@@ -79,7 +80,7 @@
         ):
             self.checker.visit_call(stmts[1])
 
-    def _assert_logging_format_no_messages(self, stmt):
+    def _assert_logging_format_no_messages(self, stmt: str) -> None:
         stmts = astroid.extract_node(
             """
         import logging #@
@@ -93,7 +94,13 @@
         with self.assertNoMessages():
             self.checker.visit_call(stmts[1])
 
-    def _assert_logging_format_message(self, msg, stmt, args=None, with_too_many=False):
+    def _assert_logging_format_message(
+        self,
+        msg: str,
+        stmt: str,
+        args: Optional[Tuple[str]] = None,
+        with_too_many: bool = False,
+    ) -> None:
         stmts = astroid.extract_node(
             """
         import logging #@
@@ -112,14 +119,14 @@
         with self.assertAddsMessages(*messages):
             self.checker.visit_call(stmts[1])
 
-    def _assert_logging_format_too_few_args(self, stmt):
+    def _assert_logging_format_too_few_args(self, stmt: str) -> None:
         self._assert_logging_format_message("logging-too-few-args", stmt)
 
-    def _assert_logging_format_too_many_args(self, stmt):
+    def _assert_logging_format_too_many_args(self, stmt: str) -> None:
         self._assert_logging_format_message("logging-too-many-args", stmt)
 
     @set_config(logging_format_style="new")
-    def test_brace_format_style_matching_arguments(self):
+    def test_brace_format_style_matching_arguments(self) -> None:
         self._assert_logging_format_no_messages("('constant string')")
         self._assert_logging_format_no_messages("('{}')")
         self._assert_logging_format_no_messages("('{}', 1)")
@@ -129,7 +136,7 @@
         self._assert_logging_format_no_messages("('{0} {named}', 1, {'named': 1})")
 
     @set_config(logging_format_style="new")
-    def test_brace_format_style_too_few_args(self):
+    def test_brace_format_style_too_few_args(self) -> None:
         self._assert_logging_format_too_few_args("('{}, {}', 1)")
         self._assert_logging_format_too_few_args("('{0}, {1}', 1)")
         self._assert_logging_format_too_few_args(
@@ -140,7 +147,7 @@
         self._assert_logging_format_too_few_args("('{0}, {named}', {'named': 1})")
 
     @set_config(logging_format_style="new")
-    def test_brace_format_style_not_enough_arguments(self):
+    def test_brace_format_style_not_enough_arguments(self) -> None:
         self._assert_logging_format_too_many_args("('constant string', 1, 2)")
         self._assert_logging_format_too_many_args("('{}', 1, 2)")
         self._assert_logging_format_too_many_args("('{0}', 1, 2)")
@@ -151,7 +158,7 @@
 
     @pytest.mark.skipif(sys.version_info < (3, 6), reason="F-string require >=3.6")
     @set_config(logging_format_style="new")
-    def test_fstr_not_new_format_style_matching_arguments(self):
+    def test_fstr_not_new_format_style_matching_arguments(self) -> None:
         msg = "logging-fstring-interpolation"
         args = ("lazy %",)
         self._assert_logging_format_message(msg, "(f'{named}')", args)
diff --git a/tests/checkers/unittest_misc.py b/tests/checkers/unittest_misc.py
index 49f794f..adf96c2 100644
--- a/tests/checkers/unittest_misc.py
+++ b/tests/checkers/unittest_misc.py
@@ -24,7 +24,7 @@
 class TestFixme(CheckerTestCase):
     CHECKER_CLASS = misc.EncodingChecker
 
-    def test_fixme_with_message(self):
+    def test_fixme_with_message(self) -> None:
         code = """a = 1
                 # FIXME message
                 """
@@ -33,28 +33,28 @@
         ):
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_todo_without_message(self):
+    def test_todo_without_message(self) -> None:
         code = """a = 1
                 # TODO
                 """
         with self.assertAddsMessages(Message(msg_id="fixme", line=2, args="TODO")):
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_xxx_without_space(self):
+    def test_xxx_without_space(self) -> None:
         code = """a = 1
                 #XXX
                 """
         with self.assertAddsMessages(Message(msg_id="fixme", line=2, args="XXX")):
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_xxx_middle(self):
+    def test_xxx_middle(self) -> None:
         code = """a = 1
                 # midle XXX
                 """
         with self.assertNoMessages():
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_without_space_fixme(self):
+    def test_without_space_fixme(self) -> None:
         code = """a = 1
                 #FIXME
                 """
@@ -62,7 +62,7 @@
             self.checker.process_tokens(_tokenize_str(code))
 
     @set_config(notes=[])
-    def test_absent_codetag(self):
+    def test_absent_codetag(self) -> None:
         code = """a = 1
                 # FIXME	                # FIXME
                 # TODO	                # TODO
@@ -72,7 +72,7 @@
             self.checker.process_tokens(_tokenize_str(code))
 
     @set_config(notes=["CODETAG"])
-    def test_other_present_codetag(self):
+    def test_other_present_codetag(self) -> None:
         code = """a = 1
                 # CODETAG
                 # FIXME
@@ -80,19 +80,19 @@
         with self.assertAddsMessages(Message(msg_id="fixme", line=2, args="CODETAG")):
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_issue_2321_should_not_trigger(self):
+    def test_issue_2321_should_not_trigger(self) -> None:
         code = 'print("# TODO this should not trigger a fixme")'
         with self.assertNoMessages():
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_issue_2321_should_trigger(self):
+    def test_issue_2321_should_trigger(self) -> None:
         code = "# TODO this should not trigger a fixme"
         with self.assertAddsMessages(
             Message(msg_id="fixme", line=1, args="TODO this should not trigger a fixme")
         ):
             self.checker.process_tokens(_tokenize_str(code))
 
-    def test_dont_trigger_on_todoist(self):
+    def test_dont_trigger_on_todoist(self) -> None:
         code = """
         # Todoist API: What is this task about?
         # Todoist API: Look up a task's due date
diff --git a/tests/checkers/unittest_refactoring.py b/tests/checkers/unittest_refactoring.py
index 8963e22..4b132e2 100644
--- a/tests/checkers/unittest_refactoring.py
+++ b/tests/checkers/unittest_refactoring.py
@@ -6,7 +6,7 @@
 from pylint.checkers.refactoring import LenChecker
 
 
-def test_class_tree_detection():
+def test_class_tree_detection() -> None:
     module = astroid.parse(
         """
 class ClassWithBool(list):
diff --git a/tests/checkers/unittest_similar.py b/tests/checkers/unittest_similar.py
index f27df92..4ddf202 100644
--- a/tests/checkers/unittest_similar.py
+++ b/tests/checkers/unittest_similar.py
@@ -45,7 +45,7 @@
 HIDE_CODE_WITH_IMPORTS = str(INPUT / "hide_code_with_imports.py")
 
 
-def test_ignore_comments():
+def test_ignore_comments() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-comments", SIMILAR1, SIMILAR2])
@@ -74,7 +74,7 @@
     )
 
 
-def test_ignore_docstrings():
+def test_ignore_docstrings() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-docstrings", SIMILAR1, SIMILAR2])
@@ -109,7 +109,7 @@
     )
 
 
-def test_ignore_imports():
+def test_ignore_imports() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-imports", SIMILAR1, SIMILAR2])
@@ -122,7 +122,7 @@
     )
 
 
-def test_multiline_imports():
+def test_multiline_imports() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([MULTILINE, MULTILINE])
@@ -148,7 +148,7 @@
     )
 
 
-def test_ignore_multiline_imports():
+def test_ignore_multiline_imports() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-imports", MULTILINE, MULTILINE])
@@ -161,7 +161,7 @@
     )
 
 
-def test_ignore_signatures_fail():
+def test_ignore_signatures_fail() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([SIMILAR5, SIMILAR6])
@@ -199,7 +199,7 @@
     )
 
 
-def test_ignore_signatures_pass():
+def test_ignore_signatures_pass() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-signatures", SIMILAR5, SIMILAR6])
@@ -212,7 +212,7 @@
     )
 
 
-def test_ignore_signatures_class_methods_fail():
+def test_ignore_signatures_class_methods_fail() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([SIMILAR_CLS_B, SIMILAR_CLS_A])
@@ -258,7 +258,7 @@
     )
 
 
-def test_ignore_signatures_class_methods_pass():
+def test_ignore_signatures_class_methods_pass() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-signatures", SIMILAR_CLS_B, SIMILAR_CLS_A])
@@ -271,7 +271,7 @@
     )
 
 
-def test_ignore_signatures_empty_functions_fail():
+def test_ignore_signatures_empty_functions_fail() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([EMPTY_FUNCTION_1, EMPTY_FUNCTION_2])
@@ -295,7 +295,7 @@
     )
 
 
-def test_ignore_signatures_empty_functions_pass():
+def test_ignore_signatures_empty_functions_pass() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-signatures", EMPTY_FUNCTION_1, EMPTY_FUNCTION_2])
@@ -308,7 +308,7 @@
     )
 
 
-def test_no_hide_code_with_imports():
+def test_no_hide_code_with_imports() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run(["--ignore-imports"] + 2 * [HIDE_CODE_WITH_IMPORTS])
@@ -316,7 +316,7 @@
     assert "TOTAL lines=32 duplicates=16 percent=50.00" in output.getvalue()
 
 
-def test_ignore_nothing():
+def test_ignore_nothing() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([SIMILAR1, SIMILAR2])
@@ -339,7 +339,7 @@
     )
 
 
-def test_lines_without_meaningful_content_do_not_trigger_similarity():
+def test_lines_without_meaningful_content_do_not_trigger_similarity() -> None:
     output = StringIO()
     with redirect_stdout(output), pytest.raises(SystemExit) as ex:
         similar.Run([SIMILAR3, SIMILAR4])
@@ -371,7 +371,7 @@
     )
 
 
-def test_help():
+def test_help() -> None:
     output = StringIO()
     with redirect_stdout(output):
         try:
@@ -382,7 +382,7 @@
             pytest.fail("not system exit")
 
 
-def test_no_args():
+def test_no_args() -> None:
     output = StringIO()
     with redirect_stdout(output):
         try:
@@ -393,7 +393,7 @@
             pytest.fail("not system exit")
 
 
-def test_get_map_data():
+def test_get_map_data() -> None:
     """Tests that a SimilarChecker respects the MapReduceMixin interface"""
     linter = PyLinter(reporter=Reporter())
 
diff --git a/tests/checkers/unittest_stdlib.py b/tests/checkers/unittest_stdlib.py
index cfec0d4..bbd8e04 100644
--- a/tests/checkers/unittest_stdlib.py
+++ b/tests/checkers/unittest_stdlib.py
@@ -11,9 +11,12 @@
 # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
 
 import contextlib
+from typing import Any, Callable, Iterator, Optional, Union
 
 import astroid
 from astroid import nodes
+from astroid.manager import AstroidManager
+from astroid.nodes.node_classes import AssignAttr, Name
 
 from pylint.checkers import stdlib
 from pylint.interfaces import UNDEFINED
@@ -21,7 +24,12 @@
 
 
 @contextlib.contextmanager
-def _add_transform(manager, node, transform, predicate=None):
+def _add_transform(
+    manager: AstroidManager,
+    node: type,
+    transform: Callable,
+    predicate: Optional[Any] = None,
+) -> Iterator:
     manager.register_transform(node, transform, predicate)
     try:
         yield
@@ -32,7 +40,7 @@
 class TestStdlibChecker(CheckerTestCase):
     CHECKER_CLASS = stdlib.StdlibChecker
 
-    def test_deprecated_no_qname_on_unexpected_nodes(self):
+    def test_deprecated_no_qname_on_unexpected_nodes(self) -> None:
         # Test that we don't crash on nodes which don't have
         # a qname method. While this test might seem weird since
         # it uses a transform, it's actually testing a crash that
@@ -41,7 +49,11 @@
         # got to be the result of a function inference
         # beats me..)
 
-        def infer_func(node, context=None):  # pylint: disable=unused-argument
+        def infer_func(
+            node: Name, context: Optional[Any] = None
+        ) -> Iterator[
+            Union[Iterator, Iterator[AssignAttr]]
+        ]:  # pylint: disable=unused-argument
             new_node = nodes.AssignAttr()
             new_node.parent = node
             yield new_node
@@ -57,7 +69,7 @@
             with self.assertNoMessages():
                 self.checker.visit_call(node)
 
-    def test_copy_environ(self):
+    def test_copy_environ(self) -> None:
         # shallow copy of os.environ should be reported
         node = astroid.extract_node(
             """
@@ -70,7 +82,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_copy_environ_hidden(self):
+    def test_copy_environ_hidden(self) -> None:
         # shallow copy of os.environ should be reported
         # hide function names to be sure that checker is not just matching text
         node = astroid.extract_node(
@@ -85,7 +97,7 @@
         ):
             self.checker.visit_call(node)
 
-    def test_copy_dict(self):
+    def test_copy_dict(self) -> None:
         # copy of dict is OK
         node = astroid.extract_node(
             """
@@ -97,7 +109,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_copy_uninferable(self):
+    def test_copy_uninferable(self) -> None:
         # copy of uninferable object should not raise exception, nor make
         # the checker crash
         node = astroid.extract_node(
@@ -110,7 +122,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_deepcopy_environ(self):
+    def test_deepcopy_environ(self) -> None:
         # deepcopy of os.environ is OK
         node = astroid.extract_node(
             """
diff --git a/tests/checkers/unittest_strings.py b/tests/checkers/unittest_strings.py
index f0888fb..ed94759 100644
--- a/tests/checkers/unittest_strings.py
+++ b/tests/checkers/unittest_strings.py
@@ -40,13 +40,13 @@
 class TestStringChecker(CheckerTestCase):
     CHECKER_CLASS = strings.StringFormatChecker
 
-    def test_format_bytes(self):
+    def test_format_bytes(self) -> None:
         code = "b'test'.format(1, 2)"
         node = astroid.extract_node(code)
         with self.assertNoMessages():
             self.checker.visit_call(node)
 
-    def test_format_types(self):
+    def test_format_types(self) -> None:
         for code in ("'%s' % 1", "'%d' % 1", "'%f' % 1"):
             with self.assertNoMessages():
                 node = astroid.extract_node(code)
@@ -87,6 +87,6 @@
                 self.checker.visit_binop(node)
 
 
-def test_str_eval():
+def test_str_eval() -> None:
     for token in TEST_TOKENS:
         assert strings.str_eval(token) == "X"
diff --git a/tests/checkers/unittest_typecheck.py b/tests/checkers/unittest_typecheck.py
index 136d60f..4ea1329 100644
--- a/tests/checkers/unittest_typecheck.py
+++ b/tests/checkers/unittest_typecheck.py
@@ -48,7 +48,7 @@
     "Tests for pylint.checkers.typecheck"
     CHECKER_CLASS = typecheck.TypeChecker
 
-    def test_no_member_in_getattr(self):
+    def test_no_member_in_getattr(self) -> None:
         """Make sure that a module attribute access is checked by pylint."""
 
         node = astroid.extract_node(
@@ -67,7 +67,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_modules=("argparse",))
-    def test_no_member_in_getattr_ignored(self):
+    def test_no_member_in_getattr_ignored(self) -> None:
         """Make sure that a module attribute access check is omitted with a
         module that is configured to be ignored.
         """
@@ -82,7 +82,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_modules=("xml.etree.",))
-    def test_ignored_modules_invalid_pattern(self):
+    def test_ignored_modules_invalid_pattern(self) -> None:
         node = astroid.extract_node(
             """
         import xml
@@ -96,7 +96,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_modules=("xml",))
-    def test_ignored_modules_root_one_applies_as_well(self):
+    def test_ignored_modules_root_one_applies_as_well(self) -> None:
         # Check that when a root module is completely ignored, submodules are skipped.
         node = astroid.extract_node(
             """
@@ -108,7 +108,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_modules=("xml.etree*",))
-    def test_ignored_modules_patterns(self):
+    def test_ignored_modules_patterns(self) -> None:
         node = astroid.extract_node(
             """
         import xml
@@ -119,7 +119,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_classes=("xml.*",))
-    def test_ignored_classes_no_recursive_pattern(self):
+    def test_ignored_classes_no_recursive_pattern(self) -> None:
         node = astroid.extract_node(
             """
         import xml
@@ -133,7 +133,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_classes=("optparse.Values",))
-    def test_ignored_classes_qualified_name(self):
+    def test_ignored_classes_qualified_name(self) -> None:
         """Test that ignored-classes supports qualified name for ignoring."""
         node = astroid.extract_node(
             """
@@ -145,7 +145,7 @@
             self.checker.visit_attribute(node)
 
     @set_config(ignored_classes=("Values",))
-    def test_ignored_classes_only_name(self):
+    def test_ignored_classes_only_name(self) -> None:
         """Test that ignored_classes works with the name only."""
         node = astroid.extract_node(
             """
@@ -158,7 +158,7 @@
 
     @set_config(suggestion_mode=False)
     @needs_c_extension
-    def test_nomember_on_c_extension_error_msg(self):
+    def test_nomember_on_c_extension_error_msg(self) -> None:
         node = astroid.extract_node(
             """
         from coverage import tracer
@@ -173,7 +173,7 @@
 
     @set_config(suggestion_mode=True)
     @needs_c_extension
-    def test_nomember_on_c_extension_info_msg(self):
+    def test_nomember_on_c_extension_info_msg(self) -> None:
         node = astroid.extract_node(
             """
         from coverage import tracer
@@ -211,7 +211,7 @@
         with self.assertNoMessages():
             self.checker.visit_with(node)
 
-    def test_invalid_metaclass(self):
+    def test_invalid_metaclass(self) -> None:
         module = astroid.parse(
             """
         class InvalidAsMetaclass(object):
@@ -243,7 +243,7 @@
             with self.assertAddsMessages(message):
                 self.checker.visit_classdef(classdef)
 
-    def test_invalid_metaclass_function_metaclasses(self):
+    def test_invalid_metaclass_function_metaclasses(self) -> None:
         module = astroid.parse(
             """
         def invalid_metaclass_1(name, bases, attrs):
@@ -264,7 +264,7 @@
             with self.assertAddsMessages(message):
                 self.checker.visit_classdef(classdef)
 
-    def test_typing_namedtuple_not_callable_issue1295(self):
+    def test_typing_namedtuple_not_callable_issue1295(self) -> None:
         module = astroid.parse(
             """
         import typing
@@ -279,7 +279,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(call)
 
-    def test_typing_namedtuple_unsubscriptable_object_issue1295(self):
+    def test_typing_namedtuple_unsubscriptable_object_issue1295(self) -> None:
         module = astroid.parse(
             """
         import typing
@@ -290,7 +290,7 @@
         with self.assertNoMessages():
             self.checker.visit_subscript(subscript)
 
-    def test_staticmethod_multiprocessing_call(self):
+    def test_staticmethod_multiprocessing_call(self) -> None:
         """Make sure not-callable isn't raised for descriptors
 
         astroid can't process descriptors correctly so
@@ -308,7 +308,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(call)
 
-    def test_not_callable_uninferable_property(self):
+    def test_not_callable_uninferable_property(self) -> None:
         """Make sure not-callable isn't raised for uninferable
         properties
         """
@@ -326,7 +326,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(call)
 
-    def test_descriptor_call(self):
+    def test_descriptor_call(self) -> None:
         call = astroid.extract_node(
             """
         def func():
@@ -345,7 +345,7 @@
         with self.assertNoMessages():
             self.checker.visit_call(call)
 
-    def test_unknown_parent(self):
+    def test_unknown_parent(self) -> None:
         """Make sure the callable check does not crash when a node's parent
         cannot be determined.
         """
@@ -366,7 +366,7 @@
     "Tests for pylint.checkers.typecheck on decorated functions."
     CHECKER_CLASS = typecheck.TypeChecker
 
-    def test_issue3882_class_decorators(self):
+    def test_issue3882_class_decorators(self) -> None:
         decorators = """
         class Unsubscriptable:
             def __init__(self, f):
@@ -389,7 +389,7 @@
         self.decorated_by_subscriptable_then_unsubscriptable_class(decorators)
         self.decorated_by_unsubscriptable_then_subscriptable_class(decorators)
 
-    def getitem_on_modules(self):
+    def getitem_on_modules(self) -> None:
         """Mainly validate the code won't crash if we're not having a function."""
         module = astroid.parse(
             """
@@ -408,7 +408,7 @@
         ):
             self.checker.visit_subscript(subscript)
 
-    def typing_objects_are_subscriptable(self, generic):
+    def typing_objects_are_subscriptable(self, generic: str) -> None:
         module = astroid.parse(
             f"""
         import typing
@@ -419,7 +419,7 @@
         with self.assertNoMessages():
             self.checker.visit_subscript(subscript)
 
-    def decorated_by_a_subscriptable_class(self, decorators):
+    def decorated_by_a_subscriptable_class(self, decorators: str) -> None:
         module = astroid.parse(
             decorators
             + """
@@ -434,7 +434,9 @@
         with self.assertNoMessages():
             self.checker.visit_subscript(subscript)
 
-    def decorated_by_subscriptable_then_unsubscriptable_class(self, decorators):
+    def decorated_by_subscriptable_then_unsubscriptable_class(
+        self, decorators: str
+    ) -> None:
         module = astroid.parse(
             decorators
             + """
@@ -457,7 +459,9 @@
         ):
             self.checker.visit_subscript(subscript)
 
-    def decorated_by_unsubscriptable_then_subscriptable_class(self, decorators):
+    def decorated_by_unsubscriptable_then_subscriptable_class(
+        self, decorators: str
+    ) -> None:
         module = astroid.parse(
             decorators
             + """
@@ -473,7 +477,7 @@
         with self.assertNoMessages():
             self.checker.visit_subscript(subscript)
 
-    def decorated_by_an_unsubscriptable_class(self, decorators):
+    def decorated_by_an_unsubscriptable_class(self, decorators: str) -> None:
         module = astroid.parse(
             decorators
             + """
diff --git a/tests/checkers/unittest_utils.py b/tests/checkers/unittest_utils.py
index 5703d4e..b94807a 100644
--- a/tests/checkers/unittest_utils.py
+++ b/tests/checkers/unittest_utils.py
@@ -18,6 +18,8 @@
 
 """Tests for the pylint.checkers.utils module."""
 
+from typing import Dict, Union
+
 import astroid
 import pytest
 
@@ -43,7 +45,9 @@
     "fn,kw",
     [("foo(3)", {"keyword": "bar"}), ("foo(one=a, two=b, three=c)", {"position": 1})],
 )
-def testGetArgumentFromCallError(fn, kw):
+def testGetArgumentFromCallError(
+    fn: str, kw: Union[Dict[str, int], Dict[str, str]]
+) -> None:
     with pytest.raises(utils.NoSuchArgumentError):
         node = astroid.extract_node(fn)
         utils.get_argument_from_call(node, **kw)
@@ -52,12 +56,14 @@
 @pytest.mark.parametrize(
     "fn,kw", [("foo(bar=3)", {"keyword": "bar"}), ("foo(a, b, c)", {"position": 1})]
 )
-def testGetArgumentFromCallExists(fn, kw):
+def testGetArgumentFromCallExists(
+    fn: str, kw: Union[Dict[str, int], Dict[str, str]]
+) -> None:
     node = astroid.extract_node(fn)
     assert utils.get_argument_from_call(node, **kw) is not None
 
 
-def testGetArgumentFromCall():
+def testGetArgumentFromCall() -> None:
     node = astroid.extract_node("foo(a, not_this_one=1, this_one=2)")
     arg = utils.get_argument_from_call(node, position=2, keyword="this_one")
     assert arg.value == 2
@@ -71,7 +77,7 @@
     assert name.name == "a"
 
 
-def test_error_of_type():
+def test_error_of_type() -> None:
     nodes = astroid.extract_node(
         """
     try: pass
@@ -90,7 +96,7 @@
     assert utils.error_of_type(nodes[1], Exception)
 
 
-def test_node_ignores_exception():
+def test_node_ignores_exception() -> None:
     nodes = astroid.extract_node(
         """
     try:
@@ -117,7 +123,7 @@
     assert not utils.node_ignores_exception(nodes[3], ZeroDivisionError)
 
 
-def test_is_subclass_of_node_b_derived_from_node_a():
+def test_is_subclass_of_node_b_derived_from_node_a() -> None:
     nodes = astroid.extract_node(
         """
     class Superclass: #@
@@ -130,7 +136,7 @@
     assert utils.is_subclass_of(nodes[1], nodes[0])
 
 
-def test_is_subclass_of_node_b_not_derived_from_node_a():
+def test_is_subclass_of_node_b_not_derived_from_node_a() -> None:
     nodes = astroid.extract_node(
         """
     class OneClass: #@
@@ -143,7 +149,7 @@
     assert not utils.is_subclass_of(nodes[1], nodes[0])
 
 
-def test_is_subclass_of_not_classdefs():
+def test_is_subclass_of_not_classdefs() -> None:
     node = astroid.extract_node(
         """
     class OneClass: #@
@@ -155,7 +161,7 @@
     assert not utils.is_subclass_of(None, None)
 
 
-def test_parse_format_method_string():
+def test_parse_format_method_string() -> None:
     samples = [
         ("{}", 1),
         ("{}:{}", 2),
@@ -178,7 +184,7 @@
         assert keyword_args + num_args + pos_args == count
 
 
-def test_inherit_from_std_ex_recursive_definition():
+def test_inherit_from_std_ex_recursive_definition() -> None:
     node = astroid.extract_node(
         """
       import datetime
@@ -193,7 +199,7 @@
     assert not utils.inherit_from_std_ex(node)
 
 
-def test_get_node_last_lineno_simple():
+def test_get_node_last_lineno_simple() -> None:
     node = astroid.extract_node(
         """
         pass
@@ -202,7 +208,7 @@
     assert utils.get_node_last_lineno(node) == 2
 
 
-def test_get_node_last_lineno_if_simple():
+def test_get_node_last_lineno_if_simple() -> None:
     node = astroid.extract_node(
         """
         if True:
@@ -213,7 +219,7 @@
     assert utils.get_node_last_lineno(node) == 4
 
 
-def test_get_node_last_lineno_if_elseif_else():
+def test_get_node_last_lineno_if_elseif_else() -> None:
     node = astroid.extract_node(
         """
         if True:
@@ -227,7 +233,7 @@
     assert utils.get_node_last_lineno(node) == 7
 
 
-def test_get_node_last_lineno_while():
+def test_get_node_last_lineno_while() -> None:
     node = astroid.extract_node(
         """
         while True:
@@ -237,7 +243,7 @@
     assert utils.get_node_last_lineno(node) == 3
 
 
-def test_get_node_last_lineno_while_else():
+def test_get_node_last_lineno_while_else() -> None:
     node = astroid.extract_node(
         """
         while True:
@@ -249,7 +255,7 @@
     assert utils.get_node_last_lineno(node) == 5
 
 
-def test_get_node_last_lineno_for():
+def test_get_node_last_lineno_for() -> None:
     node = astroid.extract_node(
         """
         for x in range(0, 5):
@@ -259,7 +265,7 @@
     assert utils.get_node_last_lineno(node) == 3
 
 
-def test_get_node_last_lineno_for_else():
+def test_get_node_last_lineno_for_else() -> None:
     node = astroid.extract_node(
         """
         for x in range(0, 5):
@@ -271,7 +277,7 @@
     assert utils.get_node_last_lineno(node) == 5
 
 
-def test_get_node_last_lineno_try():
+def test_get_node_last_lineno_try() -> None:
     node = astroid.extract_node(
         """
         try:
@@ -285,7 +291,7 @@
     assert utils.get_node_last_lineno(node) == 7
 
 
-def test_get_node_last_lineno_try_except_else():
+def test_get_node_last_lineno_try_except_else() -> None:
     node = astroid.extract_node(
         """
         try:
@@ -300,7 +306,7 @@
     assert utils.get_node_last_lineno(node) == 8
 
 
-def test_get_node_last_lineno_try_except_finally():
+def test_get_node_last_lineno_try_except_finally() -> None:
     node = astroid.extract_node(
         """
         try:
@@ -314,7 +320,7 @@
     assert utils.get_node_last_lineno(node) == 7
 
 
-def test_get_node_last_lineno_try_except_else_finally():
+def test_get_node_last_lineno_try_except_else_finally() -> None:
     node = astroid.extract_node(
         """
         try:
@@ -330,7 +336,7 @@
     assert utils.get_node_last_lineno(node) == 9
 
 
-def test_get_node_last_lineno_with():
+def test_get_node_last_lineno_with() -> None:
     node = astroid.extract_node(
         """
         with x as y:
@@ -341,7 +347,7 @@
     assert utils.get_node_last_lineno(node) == 4
 
 
-def test_get_node_last_lineno_method():
+def test_get_node_last_lineno_method() -> None:
     node = astroid.extract_node(
         """
         def x(a, b):
@@ -352,7 +358,7 @@
     assert utils.get_node_last_lineno(node) == 4
 
 
-def test_get_node_last_lineno_decorator():
+def test_get_node_last_lineno_decorator() -> None:
     node = astroid.extract_node(
         """
         @decor()
@@ -364,7 +370,7 @@
     assert utils.get_node_last_lineno(node) == 5
 
 
-def test_get_node_last_lineno_class():
+def test_get_node_last_lineno_class() -> None:
     node = astroid.extract_node(
         """
         class C(object):
@@ -381,7 +387,7 @@
     assert utils.get_node_last_lineno(node) == 10
 
 
-def test_get_node_last_lineno_combined():
+def test_get_node_last_lineno_combined() -> None:
     node = astroid.extract_node(
         """
         class C(object):
diff --git a/tests/checkers/unittest_variables.py b/tests/checkers/unittest_variables.py
index 32e4eca..7ab79bf 100644
--- a/tests/checkers/unittest_variables.py
+++ b/tests/checkers/unittest_variables.py
@@ -39,7 +39,7 @@
 
     CHECKER_CLASS = variables.VariablesChecker
 
-    def test_bitbucket_issue_78(self):
+    def test_bitbucket_issue_78(self) -> None:
         """Issue 78 report a false positive for unused-module"""
         module = astroid.parse(
             """
@@ -54,7 +54,7 @@
             self.walk(module)
 
     @set_config(ignored_modules=("argparse",))
-    def test_no_name_in_module_skipped(self):
+    def test_no_name_in_module_skipped(self) -> None:
         """Make sure that 'from ... import ...' does not emit a
         'no-name-in-module' with a module that is configured
         to be ignored.
@@ -68,7 +68,7 @@
         with self.assertNoMessages():
             self.checker.visit_importfrom(node)
 
-    def test_all_elements_without_parent(self):
+    def test_all_elements_without_parent(self) -> None:
         node = astroid.extract_node("__all__ = []")
         node.value.elts.append(astroid.Const("test"))
         root = node.root()
@@ -76,7 +76,7 @@
             self.checker.visit_module(root)
             self.checker.leave_module(root)
 
-    def test_redefined_builtin_ignored(self):
+    def test_redefined_builtin_ignored(self) -> None:
         node = astroid.parse(
             """
         from future.builtins import open
@@ -86,7 +86,7 @@
             self.checker.visit_module(node)
 
     @set_config(redefining_builtins_modules=("os",))
-    def test_redefined_builtin_custom_modules(self):
+    def test_redefined_builtin_custom_modules(self) -> None:
         node = astroid.parse(
             """
         from os import open
@@ -96,7 +96,7 @@
             self.checker.visit_module(node)
 
     @set_config(redefining_builtins_modules=("os",))
-    def test_redefined_builtin_modname_not_ignored(self):
+    def test_redefined_builtin_modname_not_ignored(self) -> None:
         node = astroid.parse(
             """
         from future.builtins import open
@@ -108,7 +108,7 @@
             self.checker.visit_module(node)
 
     @set_config(redefining_builtins_modules=("os",))
-    def test_redefined_builtin_in_function(self):
+    def test_redefined_builtin_in_function(self) -> None:
         node = astroid.extract_node(
             """
         def test():
@@ -119,7 +119,7 @@
             self.checker.visit_module(node.root())
             self.checker.visit_functiondef(node)
 
-    def test_unassigned_global(self):
+    def test_unassigned_global(self) -> None:
         node = astroid.extract_node(
             """
             def func():
@@ -131,7 +131,7 @@
         with self.assertAddsMessages(msg):
             self.checker.visit_global(node)
 
-    def test_listcomp_in_decorator(self):
+    def test_listcomp_in_decorator(self) -> None:
         """Make sure class attributes in scope for listcomp in decorator.
 
         https://github.com/PyCQA/pylint/issues/511
@@ -157,7 +157,7 @@
         with self.assertNoMessages():
             self.walk(module)
 
-    def test_listcomp_in_ancestors(self):
+    def test_listcomp_in_ancestors(self) -> None:
         """Ensure list comprehensions in base classes are scoped correctly
 
         https://github.com/PyCQA/pylint/issues/3434
@@ -177,7 +177,7 @@
         with self.assertNoMessages():
             self.walk(module)
 
-    def test_return_type_annotation(self):
+    def test_return_type_annotation(self) -> None:
         """Make sure class attributes in scope for return type annotations.
 
         https://github.com/PyCQA/pylint/issues/1976
@@ -217,16 +217,16 @@
 
     CHECKER_CLASS = variables.VariablesChecker
 
-    def setup_method(self):
+    def setup_method(self) -> None:
         super().setup_method()
         self._to_consume_backup = self.checker._to_consume
         self.checker._to_consume = []
 
-    def teardown_method(self):
+    def teardown_method(self) -> None:
         self.checker._to_consume = self._to_consume_backup
 
     @set_config(callbacks=("callback_", "_callback"))
-    def test_custom_callback_string(self):
+    def test_custom_callback_string(self) -> None:
         """Test the --calbacks option works."""
         node = astroid.extract_node(
             """
@@ -273,7 +273,7 @@
             self.checker.leave_functiondef(node)
 
     @set_config(redefining_builtins_modules=("os",))
-    def test_redefined_builtin_modname_not_ignored(self):
+    def test_redefined_builtin_modname_not_ignored(self) -> None:
         node = astroid.parse(
             """
         from future.builtins import open
@@ -285,7 +285,7 @@
             self.checker.visit_module(node)
 
     @set_config(redefining_builtins_modules=("os",))
-    def test_redefined_builtin_in_function(self):
+    def test_redefined_builtin_in_function(self) -> None:
         node = astroid.extract_node(
             """
         def test():
@@ -296,7 +296,7 @@
             self.checker.visit_module(node.root())
             self.checker.visit_functiondef(node)
 
-    def test_import_as_underscore(self):
+    def test_import_as_underscore(self) -> None:
         node = astroid.parse(
             """
         import math as _
@@ -305,7 +305,7 @@
         with self.assertNoMessages():
             self.walk(node)
 
-    def test_lambda_in_classdef(self):
+    def test_lambda_in_classdef(self) -> None:
         # Make sure lambda doesn't raises
         # Undefined-method in class def
 
@@ -321,7 +321,7 @@
         with self.assertNoMessages():
             self.walk(node)
 
-    def test_nested_lambda(self):
+    def test_nested_lambda(self) -> None:
         """Make sure variables from parent lambdas
         aren't noted as undefined
 
@@ -336,7 +336,7 @@
             self.walk(node)
 
     @set_config(ignored_argument_names=re.compile("arg"))
-    def test_ignored_argument_names_no_message(self):
+    def test_ignored_argument_names_no_message(self) -> None:
         """Make sure is_ignored_argument_names properly ignores
         function arguments"""
         node = astroid.parse(
@@ -349,7 +349,7 @@
             self.walk(node)
 
     @set_config(ignored_argument_names=re.compile("args|kwargs"))
-    def test_ignored_argument_names_starred_args(self):
+    def test_ignored_argument_names_starred_args(self) -> None:
         node = astroid.parse(
             """
         def fooby(*args, **kwargs):
@@ -364,7 +364,7 @@
     CHECKER_CLASS = variables.VariablesChecker
 
     @staticmethod
-    def test_package_all():
+    def test_package_all() -> None:
 
         sys.path.insert(0, REGR_DATA_DIR)
         try:
diff --git a/tests/extensions/test_bad_builtin.py b/tests/extensions/test_bad_builtin.py
index 71c4df0..549c3de 100644
--- a/tests/extensions/test_bad_builtin.py
+++ b/tests/extensions/test_bad_builtin.py
@@ -17,6 +17,7 @@
 
 from pylint.extensions.bad_builtin import BadBuiltinChecker
 from pylint.lint import fix_import_path
+from pylint.lint.pylinter import PyLinter
 
 EXPECTED = [
     "Used builtin function 'map'. Using a list comprehension can be clearer.",
@@ -34,7 +35,7 @@
     return ["I"]
 
 
-def test_types_redefined(linter):
+def test_types_redefined(linter: PyLinter) -> None:
     elif_test = osp.join(osp.dirname(osp.abspath(__file__)), "data", "bad_builtin.py")
     with fix_import_path([elif_test]):
         linter.check([elif_test])
diff --git a/tests/extensions/test_broad_try_clause.py b/tests/extensions/test_broad_try_clause.py
index 9ec3f0f..21c79fe 100644
--- a/tests/extensions/test_broad_try_clause.py
+++ b/tests/extensions/test_broad_try_clause.py
@@ -21,7 +21,7 @@
 
 
 class BroadTryClauseTestReporter(BaseReporter):
-    def on_set_current_module(self, module, filepath):
+    def on_set_current_module(self, module: str, filepath: str) -> None:
         self.messages = []
 
     def _display(self, layout):
@@ -29,15 +29,16 @@
 
 
 class BroadTryClauseTC(unittest.TestCase):
+    _linter = PyLinter()
+
     @classmethod
     def setUpClass(cls):
-        cls._linter = PyLinter()
         cls._linter.set_reporter(BroadTryClauseTestReporter())
         checkers.initialize(cls._linter)
         cls._linter.register_checker(BroadTryClauseChecker(cls._linter))
         cls._linter.disable("I")
 
-    def test_broad_try_clause_message(self):
+    def test_broad_try_clause_message(self) -> None:
         broad_try_clause_test = osp.join(
             osp.dirname(osp.abspath(__file__)), "data", "broad_try_clause.py"
         )
diff --git a/tests/extensions/test_check_docs.py b/tests/extensions/test_check_docs.py
index f462ea3..2e70046 100644
--- a/tests/extensions/test_check_docs.py
+++ b/tests/extensions/test_check_docs.py
@@ -42,7 +42,7 @@
         "docstring_min_length": -1,
     }
 
-    def test_missing_func_params_in_sphinx_docstring(self):
+    def test_missing_func_params_in_sphinx_docstring(self) -> None:
         """Example of a function with missing Sphinx parameter documentation in
         the docstring
         """
@@ -64,7 +64,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_missing_func_params_in_google_docstring(self):
+    def test_missing_func_params_in_google_docstring(self) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring
         """
@@ -88,7 +88,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_missing_type_doc_google_docstring_exempt_kwonly_args(self):
+    def test_missing_type_doc_google_docstring_exempt_kwonly_args(self) -> None:
         node = astroid.extract_node(
             """
         def identifier_kwarg_method(arg1: int, arg2: int, *, value1: str, value2: str):
@@ -106,7 +106,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_missing_func_params_with_annotations_in_google_docstring(self):
+    def test_missing_func_params_with_annotations_in_google_docstring(self) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring.
         """
@@ -128,7 +128,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_default_arg_with_annotations_in_google_docstring(self):
+    def test_default_arg_with_annotations_in_google_docstring(self) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring.
         """
@@ -150,7 +150,9 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_missing_func_params_with_partial_annotations_in_google_docstring(self):
+    def test_missing_func_params_with_partial_annotations_in_google_docstring(
+        self,
+    ) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring.
         """
@@ -174,7 +176,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_non_builtin_annotations_in_google_docstring(self):
+    def test_non_builtin_annotations_in_google_docstring(self) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring.
         """
@@ -192,7 +194,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_non_builtin_annotations_for_returntype_in_google_docstring(self):
+    def test_non_builtin_annotations_for_returntype_in_google_docstring(self) -> None:
         """Example of a function with missing Google style parameter
         documentation in the docstring.
         """
@@ -210,7 +212,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_func_params_and_keyword_params_in_google_docstring(self):
+    def test_func_params_and_keyword_params_in_google_docstring(self) -> None:
         """Example of a function with Google style parameter splitted
         in Args and Keyword Args in the docstring
         """
@@ -232,7 +234,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_func_params_and_wrong_keyword_params_in_google_docstring(self):
+    def test_func_params_and_wrong_keyword_params_in_google_docstring(self) -> None:
         """Example of a function with Google style parameter splitted
         in Args and Keyword Args in the docstring but with wrong keyword args
         """
@@ -259,7 +261,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_missing_func_params_in_numpy_docstring(self):
+    def test_missing_func_params_in_numpy_docstring(self) -> None:
         """Example of a function with missing NumPy style parameter
         documentation in the docstring
         """
@@ -287,7 +289,7 @@
             self.checker.visit_functiondef(node)
 
     @set_config(accept_no_param_doc=True)
-    def test_tolerate_no_param_documentation_at_all(self):
+    def test_tolerate_no_param_documentation_at_all(self) -> None:
         """Example of a function with no parameter documentation at all
 
         No error message is emitted.
@@ -304,7 +306,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_don_t_tolerate_no_param_documentation_at_all(self):
+    def test_don_t_tolerate_no_param_documentation_at_all(self) -> None:
         """Example of a function with no parameter documentation at all
 
         Missing documentation error message is emitted.
@@ -324,7 +326,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_see_tolerate_no_param_documentation_at_all(self):
+    def test_see_tolerate_no_param_documentation_at_all(self) -> None:
         """Example for the usage of "For the parameters, see"
         to suppress missing-param warnings.
         """
@@ -351,7 +353,7 @@
             if isinstance(body_item, nodes.FunctionDef) and hasattr(body_item, "name"):
                 self.checker.visit_functiondef(body_item)
 
-    def test_missing_method_params_in_sphinx_docstring(self):
+    def test_missing_method_params_in_sphinx_docstring(self) -> None:
         """Example of a class method with missing parameter documentation in
         the Sphinx style docstring
         """
@@ -375,7 +377,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_missing_method_params_in_google_docstring(self):
+    def test_missing_method_params_in_google_docstring(self) -> None:
         """Example of a class method with missing parameter documentation in
         the Google style docstring
         """
@@ -400,7 +402,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_missing_method_params_in_numpy_docstring(self):
+    def test_missing_method_params_in_numpy_docstring(self) -> None:
         """Example of a class method with missing parameter documentation in
         the Numpy style docstring
         """
@@ -427,7 +429,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_existing_func_params_in_sphinx_docstring(self):
+    def test_existing_func_params_in_sphinx_docstring(self) -> None:
         """Example of a function with correctly documented parameters and
         return values (Sphinx style)
         """
@@ -455,7 +457,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_existing_func_params_in_google_docstring(self):
+    def test_existing_func_params_in_google_docstring(self) -> None:
         """Example of a function with correctly documented parameters and
         return values (Google style)
         """
@@ -481,7 +483,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_existing_func_params_in_numpy_docstring(self):
+    def test_existing_func_params_in_numpy_docstring(self) -> None:
         """Example of a function with correctly documented parameters and
         return values (Numpy style)
         """
@@ -513,7 +515,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_wrong_name_of_func_params_in_sphinx_docstring(self):
+    def test_wrong_name_of_func_params_in_sphinx_docstring(self) -> None:
         """Example of functions with inconsistent parameter names in the
         signature and in the Sphinx style documentation
         """
@@ -560,7 +562,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_wrong_name_of_func_params_in_google_docstring(self):
+    def test_wrong_name_of_func_params_in_google_docstring(self) -> None:
         """Example of functions with inconsistent parameter names in the
         signature and in the Google style documentation
         """
@@ -605,7 +607,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_wrong_name_of_func_params_in_numpy_docstring(self):
+    def test_wrong_name_of_func_params_in_numpy_docstring(self) -> None:
         """Example of functions with inconsistent parameter names in the
         signature and in the Numpy style documentation
         """
@@ -656,7 +658,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_see_sentence_for_func_params_in_sphinx_docstring(self):
+    def test_see_sentence_for_func_params_in_sphinx_docstring(self) -> None:
         """Example for the usage of "For the other parameters, see" to avoid
         too many repetitions, e.g. in functions or methods adhering to a
         given interface (Sphinx style)
@@ -677,7 +679,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_see_sentence_for_func_params_in_google_docstring(self):
+    def test_see_sentence_for_func_params_in_google_docstring(self) -> None:
         """Example for the usage of "For the other parameters, see" to avoid
         too many repetitions, e.g. in functions or methods adhering to a
         given interface (Google style)
@@ -698,7 +700,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_see_sentence_for_func_params_in_numpy_docstring(self):
+    def test_see_sentence_for_func_params_in_numpy_docstring(self) -> None:
         """Example for the usage of "For the other parameters, see" to avoid
         too many repetitions, e.g. in functions or methods adhering to a
         given interface (Numpy style)
@@ -721,7 +723,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_constr_params_in_class_sphinx(self):
+    def test_constr_params_in_class_sphinx(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Sphinx style)
 
@@ -748,7 +750,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_class_google(self):
+    def test_constr_params_in_class_google(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Google style)
 
@@ -776,7 +778,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_class_numpy(self):
+    def test_constr_params_in_class_numpy(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Numpy style)
 
@@ -806,7 +808,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_and_attributes_in_class_numpy(self):
+    def test_constr_params_and_attributes_in_class_numpy(self) -> None:
         """Example of a class with correct constructor parameter documentation
         and an attributes section (Numpy style)
         """
@@ -831,7 +833,7 @@
         with self.assertNoMessages():
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_init_sphinx(self):
+    def test_constr_params_in_init_sphinx(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Sphinx style)
 
@@ -859,7 +861,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_init_google(self):
+    def test_constr_params_in_init_google(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Google style)
 
@@ -887,7 +889,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_init_numpy(self):
+    def test_constr_params_in_init_numpy(self) -> None:
         """Example of a class with missing constructor parameter documentation
         (Numpy style)
 
@@ -917,7 +919,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_see_sentence_for_constr_params_in_class(self):
+    def test_see_sentence_for_constr_params_in_class(self) -> None:
         """Example usage of "For the parameters, see" in class docstring"""
         node = astroid.extract_node(
             """
@@ -936,7 +938,7 @@
         with self.assertNoMessages():
             self._visit_methods_of_class(node)
 
-    def test_see_sentence_for_constr_params_in_init(self):
+    def test_see_sentence_for_constr_params_in_init(self) -> None:
         """Example usage of "For the parameters, see" in init docstring"""
         node = astroid.extract_node(
             """
@@ -955,7 +957,7 @@
         with self.assertNoMessages():
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_class_and_init_sphinx(self):
+    def test_constr_params_in_class_and_init_sphinx(self) -> None:
         """Example of a class with missing constructor parameter documentation
         in both the init docstring and the class docstring
         (Sphinx style)
@@ -993,7 +995,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_class_and_init_google(self):
+    def test_constr_params_in_class_and_init_google(self) -> None:
         """Example of a class with missing constructor parameter documentation
         in both the init docstring and the class docstring
         (Google style)
@@ -1033,7 +1035,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_constr_params_in_class_and_init_numpy(self):
+    def test_constr_params_in_class_and_init_numpy(self) -> None:
         """Example of a class with missing constructor parameter documentation
         in both the init docstring and the class docstring
         (Numpy style)
@@ -1077,7 +1079,7 @@
         ):
             self._visit_methods_of_class(node)
 
-    def test_kwonlyargs_are_taken_in_account(self):
+    def test_kwonlyargs_are_taken_in_account(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(arg, *, kwonly, missing_kwonly):
@@ -1094,7 +1096,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_args_sphinx(self):
+    def test_warns_missing_args_sphinx(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1114,7 +1116,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_kwargs_sphinx(self):
+    def test_warns_missing_kwargs_sphinx(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1134,7 +1136,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_args_google(self):
+    def test_warns_missing_args_google(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1155,7 +1157,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_kwargs_google(self):
+    def test_warns_missing_kwargs_google(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1176,7 +1178,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_args_numpy(self):
+    def test_warns_missing_args_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1201,7 +1203,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_missing_kwargs_numpy(self):
+    def test_warns_missing_kwargs_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1226,7 +1228,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_finds_args_without_type_sphinx(self):
+    def test_finds_args_without_type_sphinx(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1245,7 +1247,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_kwargs_without_type_sphinx(self):
+    def test_finds_kwargs_without_type_sphinx(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1264,7 +1266,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_args_without_type_google(self):
+    def test_finds_args_without_type_google(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1284,7 +1286,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_kwargs_without_type_google(self):
+    def test_finds_kwargs_without_type_google(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1304,7 +1306,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_args_without_type_numpy(self):
+    def test_finds_args_without_type_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1329,7 +1331,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_args_with_xref_type_google(self):
+    def test_finds_args_with_xref_type_google(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1349,7 +1351,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_args_with_xref_type_numpy(self):
+    def test_finds_args_with_xref_type_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, *args):
@@ -1374,7 +1376,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_kwargs_without_type_numpy(self):
+    def test_finds_kwargs_without_type_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(named_arg, **kwargs):
@@ -1494,7 +1496,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_optional_specifier_google(self):
+    def test_ignores_optional_specifier_google(self) -> None:
         node = astroid.extract_node(
             '''
         def do_something(param1, param2, param3=(), param4=[], param5=[], param6=True):
@@ -1517,7 +1519,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_optional_specifier_numpy(self):
+    def test_ignores_optional_specifier_numpy(self) -> None:
         node = astroid.extract_node(
             '''
         def do_something(param, param2='all'):
@@ -1541,7 +1543,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_short_name_exception(self):
+    def test_finds_short_name_exception(self) -> None:
         node = astroid.extract_node(
             '''
         from fake_package import BadError
@@ -1558,7 +1560,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_missing_raises_from_setter_sphinx(self):
+    def test_finds_missing_raises_from_setter_sphinx(self) -> None:
         """Example of a setter having missing raises documentation in
         the Sphinx style docstring of the property
         """
@@ -1587,7 +1589,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_missing_raises_from_setter_google(self):
+    def test_finds_missing_raises_from_setter_google(self) -> None:
         """Example of a setter having missing raises documentation in
         the Google style docstring of the property
         """
@@ -1621,7 +1623,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_missing_raises_from_setter_numpy(self):
+    def test_finds_missing_raises_from_setter_numpy(self) -> None:
         """Example of a setter having missing raises documentation in
         the Numpy style docstring of the property
         """
@@ -1657,7 +1659,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_missing_raises_in_setter_sphinx(self):
+    def test_finds_missing_raises_in_setter_sphinx(self) -> None:
         """Example of a setter having missing raises documentation in
         its own Sphinx style docstring
         """
@@ -1690,7 +1692,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_missing_raises_from_setter_google_2(self):
+    def test_finds_missing_raises_from_setter_google_2(self) -> None:
         """Example of a setter having missing raises documentation in
         its own Google style docstring of the property
         """
@@ -1726,7 +1728,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_missing_raises_from_setter_numpy_2(self):
+    def test_finds_missing_raises_from_setter_numpy_2(self) -> None:
         """Example of a setter having missing raises documentation in
         its own Numpy style docstring of the property
         """
@@ -1766,7 +1768,7 @@
         ):
             self.checker.visit_raise(node)
 
-    def test_finds_property_return_type_sphinx(self):
+    def test_finds_property_return_type_sphinx(self) -> None:
         """Example of a property having return documentation in
         a Sphinx style docstring
         """
@@ -1785,7 +1787,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_property_return_type_google(self):
+    def test_finds_property_return_type_google(self) -> None:
         """Example of a property having return documentation in
         a Google style docstring
         """
@@ -1806,7 +1808,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_property_return_type_numpy(self):
+    def test_finds_property_return_type_numpy(self) -> None:
         """Example of a property having return documentation in
         a numpy style docstring
         """
@@ -1829,7 +1831,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_finds_annotation_property_return_type_sphinx(self):
+    def test_finds_annotation_property_return_type_sphinx(self) -> None:
         """Example of a property having missing return documentation in
         a Sphinx style docstring
         """
@@ -1849,7 +1851,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(node)
 
-    def test_finds_missing_property_return_type_sphinx(self):
+    def test_finds_missing_property_return_type_sphinx(self) -> None:
         """Example of a property having missing return documentation in
         a Sphinx style docstring
         """
@@ -1871,7 +1873,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_finds_annotation_property_return_type_google(self):
+    def test_finds_annotation_property_return_type_google(self) -> None:
         """Example of a property having return documentation in
         a Google style docstring
         """
@@ -1892,7 +1894,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(node)
 
-    def test_finds_missing_property_return_type_google(self):
+    def test_finds_missing_property_return_type_google(self) -> None:
         """Example of a property having return documentation in
         a Google style docstring
         """
@@ -1915,7 +1917,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_finds_missing_property_return_type_numpy(self):
+    def test_finds_missing_property_return_type_numpy(self) -> None:
         """Example of a property having return documentation in
         a numpy style docstring
         """
@@ -1940,7 +1942,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_ignores_non_property_return_type_sphinx(self):
+    def test_ignores_non_property_return_type_sphinx(self) -> None:
         """Example of a class function trying to use `type` as return
         documentation in a Sphinx style docstring
         """
@@ -1961,7 +1963,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_ignores_non_property_return_type_google(self):
+    def test_ignores_non_property_return_type_google(self) -> None:
         """Example of a class function trying to use `type` as return
         documentation in a Google style docstring
         """
@@ -1984,7 +1986,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_ignores_non_property_return_type_numpy(self):
+    def test_ignores_non_property_return_type_numpy(self) -> None:
         """Example of a class function trying to use `type` as return
         documentation in a numpy style docstring
         """
@@ -2009,7 +2011,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_non_property_annotation_return_type_numpy(self):
+    def test_non_property_annotation_return_type_numpy(self) -> None:
         """Example of a class function trying to use `type` as return
         documentation in a numpy style docstring
         """
@@ -2033,7 +2035,7 @@
         ):
             self.checker.visit_return(node)
 
-    def test_ignores_return_in_abstract_method_sphinx(self):
+    def test_ignores_return_in_abstract_method_sphinx(self) -> None:
         """Example of an abstract method documenting the return type that an
         implementation should return.
         """
@@ -2054,7 +2056,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_return_in_abstract_method_google(self):
+    def test_ignores_return_in_abstract_method_google(self) -> None:
         """Example of an abstract method documenting the return type that an
         implementation should return.
         """
@@ -2075,7 +2077,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_return_in_abstract_method_numpy(self):
+    def test_ignores_return_in_abstract_method_numpy(self) -> None:
         """Example of an abstract method documenting the return type that an
         implementation should return.
         """
@@ -2098,7 +2100,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_raise_notimplementederror_sphinx(self):
+    def test_ignores_raise_notimplementederror_sphinx(self) -> None:
         """Example of an abstract"""
         node = astroid.extract_node(
             """
@@ -2115,7 +2117,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_return_in_abstract_method_google_2(self):
+    def test_ignores_return_in_abstract_method_google_2(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2134,7 +2136,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_return_in_abstract_method_numpy_2(self):
+    def test_ignores_return_in_abstract_method_numpy_2(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2155,7 +2157,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_ignored_argument_names_sphinx(self):
+    def test_ignores_ignored_argument_names_sphinx(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2174,7 +2176,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_ignored_argument_names_google(self):
+    def test_ignores_ignored_argument_names_google(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2193,7 +2195,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_ignored_argument_names_numpy(self):
+    def test_ignores_ignored_argument_names_numpy(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2214,7 +2216,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_useless_docs_ignored_argument_names_sphinx(self):
+    def test_useless_docs_ignored_argument_names_sphinx(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2241,7 +2243,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_useless_docs_ignored_argument_names_google(self):
+    def test_useless_docs_ignored_argument_names_google(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2265,7 +2267,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_useless_docs_ignored_argument_names_numpy(self):
+    def test_useless_docs_ignored_argument_names_numpy(self) -> None:
         """Example of a method documenting the return type that an
         implementation should return.
         """
@@ -2296,7 +2298,7 @@
             self.checker.visit_functiondef(node)
 
     @set_config(no_docstring_rgx=r"^_(?!_).*$")
-    def test_skip_no_docstring_rgx(self):
+    def test_skip_no_docstring_rgx(self) -> None:
         """Example of a function that matches the default 'no-docstring-rgx' config option
 
         No error message is emitted.
@@ -2314,7 +2316,7 @@
             self.checker.visit_functiondef(node)
 
     @set_config(docstring_min_length=3)
-    def test_skip_docstring_min_length(self):
+    def test_skip_docstring_min_length(self) -> None:
         """Example of a function that is less than 'docstring-min-length' config option
 
         No error message is emitted.
diff --git a/tests/extensions/test_check_docs_utils.py b/tests/extensions/test_check_docs_utils.py
index 11c292c..5df6131 100644
--- a/tests/extensions/test_check_docs_utils.py
+++ b/tests/extensions/test_check_docs_utils.py
@@ -24,7 +24,7 @@
     "string,count",
     [("abc", 0), ("", 0), ("  abc", 2), ("\n  abc", 0), ("   \n  abc", 3)],
 )
-def test_space_indentation(string, count):
+def test_space_indentation(string: str, count: int) -> None:
     """Test for pylint_plugin.ParamDocChecker"""
     assert utils.space_indentation(string) == count
 
diff --git a/tests/extensions/test_check_mccabe.py b/tests/extensions/test_check_mccabe.py
index 5cce6bf..508f62b 100644
--- a/tests/extensions/test_check_mccabe.py
+++ b/tests/extensions/test_check_mccabe.py
@@ -14,10 +14,12 @@
 # pylint: disable=redefined-outer-name
 
 from os import path as osp
+from typing import List
 
 import pytest
 
 from pylint.extensions import mccabe
+from pylint.lint.pylinter import PyLinter
 
 EXPECTED_MSGS = [
     "'f1' is too complex. The McCabe rating is 1",
@@ -53,14 +55,16 @@
 
 
 @pytest.fixture
-def fname_mccabe_example():
+def fname_mccabe_example() -> str:
     return osp.join(osp.dirname(osp.abspath(__file__)), "data", "mccabe.py")
 
 
 @pytest.mark.parametrize(
     "complexity, expected", [(0, EXPECTED_MSGS), (9, EXPECTED_MSGS[-2:])]
 )
-def test_max_mccabe_rate(linter, fname_mccabe_example, complexity, expected):
+def test_max_mccabe_rate(
+    linter: PyLinter, fname_mccabe_example: str, complexity: int, expected: List[str]
+) -> None:
     linter.global_set_option("max-complexity", complexity)
     linter.check([fname_mccabe_example])
     real_msgs = [message.msg for message in linter.reporter.messages]
diff --git a/tests/extensions/test_check_raise_docs.py b/tests/extensions/test_check_raise_docs.py
index 19fda4b..f6103ec 100644
--- a/tests/extensions/test_check_raise_docs.py
+++ b/tests/extensions/test_check_raise_docs.py
@@ -30,7 +30,7 @@
 
     CHECKER_CLASS = DocstringParameterChecker
 
-    def test_ignores_no_docstring(self):
+    def test_ignores_no_docstring(self) -> None:
         raise_node = astroid.extract_node(
             """
         def my_func(self):
@@ -40,7 +40,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_unknown_style(self):
+    def test_ignores_unknown_style(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -53,7 +53,7 @@
             self.checker.visit_raise(raise_node)
 
     @set_config(accept_no_raise_doc=False)
-    def test_warns_unknown_style(self):
+    def test_warns_unknown_style(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -67,7 +67,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_missing_sphinx_raises(self):
+    def test_find_missing_sphinx_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -85,7 +85,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_missing_google_raises(self):
+    def test_find_missing_google_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -104,7 +104,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_google_attr_raises_exact_exc(self):
+    def test_find_google_attr_raises_exact_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -120,7 +120,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_google_attr_raises_substr_exc(self):
+    def test_find_google_attr_raises_substr_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -136,7 +136,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_valid_missing_google_attr_raises(self):
+    def test_find_valid_missing_google_attr_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -155,7 +155,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_invalid_missing_google_attr_raises(self):
+    def test_find_invalid_missing_google_attr_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -173,7 +173,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_google_raises_local_reference(self):
+    def test_google_raises_local_reference(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -192,7 +192,7 @@
             self.checker.visit_raise(raise_node)
 
     @set_config(accept_no_raise_doc=False)
-    def test_google_raises_with_prefix(self):
+    def test_google_raises_with_prefix(self) -> None:
         code_snippet = '''
         def my_func(self):
             """This is a google docstring.
@@ -208,7 +208,7 @@
             with self.assertNoMessages():
                 self.checker.visit_raise(raise_node)
 
-    def test_find_missing_numpy_raises(self):
+    def test_find_missing_numpy_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -229,7 +229,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_ignore_spurious_sphinx_raises(self):
+    def test_ignore_spurious_sphinx_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -246,7 +246,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_all_sphinx_raises(self):
+    def test_find_all_sphinx_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -266,7 +266,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_all_google_raises(self):
+    def test_find_all_google_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -283,7 +283,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_all_numpy_raises(self):
+    def test_find_all_numpy_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -303,7 +303,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_multiple_sphinx_raises(self):
+    def test_find_multiple_sphinx_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -321,7 +321,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_multiple_google_raises(self):
+    def test_find_multiple_google_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -340,7 +340,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_finds_rethrown_sphinx_raises(self):
+    def test_finds_rethrown_sphinx_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -362,7 +362,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_rethrown_google_raises(self):
+    def test_find_rethrown_google_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -385,7 +385,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_rethrown_numpy_raises(self):
+    def test_find_rethrown_numpy_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -410,7 +410,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_finds_rethrown_sphinx_multiple_raises(self):
+    def test_finds_rethrown_sphinx_multiple_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -436,7 +436,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_rethrown_google_multiple_raises(self):
+    def test_find_rethrown_google_multiple_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -463,7 +463,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_rethrown_numpy_multiple_raises(self):
+    def test_find_rethrown_numpy_multiple_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -492,7 +492,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_caught_sphinx_raises(self):
+    def test_ignores_caught_sphinx_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -511,7 +511,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_caught_google_raises(self):
+    def test_ignores_caught_google_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -531,7 +531,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_caught_numpy_raises(self):
+    def test_ignores_caught_numpy_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -553,7 +553,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_numpy_attr_raises_exact_exc(self):
+    def test_find_numpy_attr_raises_exact_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -571,7 +571,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_numpy_attr_raises_substr_exc(self):
+    def test_find_numpy_attr_raises_substr_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -589,7 +589,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_valid_missing_numpy_attr_raises(self):
+    def test_find_valid_missing_numpy_attr_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -610,7 +610,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_invalid_missing_numpy_attr_raises(self):
+    def test_find_invalid_missing_numpy_attr_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -631,7 +631,7 @@
             self.checker.visit_raise(raise_node)
 
     @set_config(accept_no_raise_doc=False)
-    def test_numpy_raises_with_prefix(self):
+    def test_numpy_raises_with_prefix(self) -> None:
         code_snippet = '''
         def my_func(self):
             """This is a numpy docstring.
@@ -649,7 +649,7 @@
             with self.assertNoMessages():
                 self.checker.visit_raise(raise_node)
 
-    def test_find_missing_sphinx_raises_infer_from_instance(self):
+    def test_find_missing_sphinx_raises_infer_from_instance(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -668,7 +668,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_missing_sphinx_raises_infer_from_function(self):
+    def test_find_missing_sphinx_raises_infer_from_function(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -688,7 +688,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_sphinx_attr_raises_exact_exc(self):
+    def test_find_sphinx_attr_raises_exact_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -703,7 +703,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_sphinx_attr_raises_substr_exc(self):
+    def test_find_sphinx_attr_raises_substr_exc(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -718,7 +718,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_find_valid_missing_sphinx_attr_raises(self):
+    def test_find_valid_missing_sphinx_attr_raises(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -736,7 +736,7 @@
         ):
             self.checker.visit_raise(raise_node)
 
-    def test_find_invalid_missing_sphinx_attr_raises(self):
+    def test_find_invalid_missing_sphinx_attr_raises(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -754,7 +754,7 @@
             self.checker.visit_raise(raise_node)
 
     @set_config(accept_no_raise_doc=False)
-    def test_sphinx_raises_with_prefix(self):
+    def test_sphinx_raises_with_prefix(self) -> None:
         code_snippet = '''
         def my_func(self):
             """This is a sphinx docstring.
@@ -772,7 +772,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_raise_uninferable(self):
+    def test_ignores_raise_uninferable(self) -> None:
         raise_node = astroid.extract_node(
             '''
         from unknown import Unknown
@@ -789,7 +789,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_returns_from_inner_functions(self):
+    def test_ignores_returns_from_inner_functions(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -812,7 +812,7 @@
             # we do NOT expect a warning about the OSError in inner_func!
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_returns_use_only_names(self):
+    def test_ignores_returns_use_only_names(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def myfunc():
@@ -829,7 +829,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_ignores_returns_use_only_exception_instances(self):
+    def test_ignores_returns_use_only_exception_instances(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def myfunc():
@@ -848,7 +848,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_no_crash_when_inferring_handlers(self):
+    def test_no_crash_when_inferring_handlers(self) -> None:
         raise_node = astroid.extract_node(
             '''
         import collections
@@ -867,7 +867,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_no_crash_when_cant_find_exception(self):
+    def test_no_crash_when_cant_find_exception(self) -> None:
         raise_node = astroid.extract_node(
             '''
         import collections
@@ -886,7 +886,7 @@
         with self.assertNoMessages():
             self.checker.visit_raise(raise_node)
 
-    def test_no_error_notimplemented_documented(self):
+    def test_no_error_notimplemented_documented(self) -> None:
         raise_node = astroid.extract_node(
             '''
         def my_func():
diff --git a/tests/extensions/test_check_return_docs.py b/tests/extensions/test_check_return_docs.py
index 6f3baa9..3e16556 100644
--- a/tests/extensions/test_check_return_docs.py
+++ b/tests/extensions/test_check_return_docs.py
@@ -31,7 +31,7 @@
 
     CHECKER_CLASS = DocstringParameterChecker
 
-    def test_ignores_no_docstring(self):
+    def test_ignores_no_docstring(self) -> None:
         return_node = astroid.extract_node(
             """
         def my_func(self):
@@ -42,7 +42,7 @@
             self.checker.visit_return(return_node)
 
     @set_config(accept_no_return_doc=False)
-    def test_warns_no_docstring(self):
+    def test_warns_no_docstring(self) -> None:
         node = astroid.extract_node(
             """
         def my_func(self):
@@ -56,7 +56,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_ignores_unknown_style(self):
+    def test_ignores_unknown_style(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -67,7 +67,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_warn_partial_sphinx_returns(self):
+    def test_warn_partial_sphinx_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -84,7 +84,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_sphinx_missing_return_type_with_annotations(self):
+    def test_sphinx_missing_return_type_with_annotations(self) -> None:
         node = astroid.extract_node(
             '''
            def my_func(self) -> bool:
@@ -99,7 +99,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_warn_partial_sphinx_returns_type(self):
+    def test_warn_partial_sphinx_returns_type(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -114,7 +114,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warn_missing_sphinx_returns(self):
+    def test_warn_missing_sphinx_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -133,7 +133,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_warn_partial_google_returns(self):
+    def test_warn_partial_google_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -151,7 +151,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_warn_partial_google_returns_type(self):
+    def test_warn_partial_google_returns_type(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -167,7 +167,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warn_missing_google_returns(self):
+    def test_warn_missing_google_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -186,7 +186,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_warn_partial_numpy_returns_type(self):
+    def test_warn_partial_numpy_returns_type(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -208,7 +208,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warn_missing_numpy_returns(self):
+    def test_warn_missing_numpy_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -229,7 +229,7 @@
         ):
             self.checker.visit_return(return_node)
 
-    def test_find_sphinx_returns(self):
+    def test_find_sphinx_returns(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -244,7 +244,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_find_google_returns(self):
+    def test_find_google_returns(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -259,7 +259,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_find_numpy_returns(self):
+    def test_find_numpy_returns(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -276,7 +276,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_find_numpy_returns_with_of(self):
+    def test_find_numpy_returns_with_of(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -293,7 +293,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_ignores_sphinx_return_none(self):
+    def test_ignores_sphinx_return_none(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -308,7 +308,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_ignores_google_return_none(self):
+    def test_ignores_google_return_none(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -323,7 +323,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_ignores_numpy_return_none(self):
+    def test_ignores_numpy_return_none(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -340,7 +340,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_sphinx_return_custom_class(self):
+    def test_finds_sphinx_return_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -355,7 +355,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_google_return_custom_class(self):
+    def test_finds_google_return_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -370,7 +370,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_numpy_return_custom_class(self):
+    def test_finds_numpy_return_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -387,7 +387,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_sphinx_return_list_of_custom_class(self):
+    def test_finds_sphinx_return_list_of_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -402,7 +402,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_google_return_list_of_custom_class(self):
+    def test_finds_google_return_list_of_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -417,7 +417,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_finds_numpy_return_list_of_custom_class(self):
+    def test_finds_numpy_return_list_of_custom_class(self) -> None:
         return_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -434,7 +434,7 @@
         with self.assertNoMessages():
             self.checker.visit_return(return_node)
 
-    def test_warns_sphinx_return_list_of_custom_class_without_description(self):
+    def test_warns_sphinx_return_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -449,7 +449,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warns_google_return_list_of_custom_class_without_description(self):
+    def test_warns_google_return_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -465,7 +465,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warns_numpy_return_list_of_custom_class_without_description(self):
+    def test_warns_numpy_return_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -482,7 +482,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-return-doc", node=node)):
             self.checker.visit_return(return_node)
 
-    def test_warns_sphinx_redundant_return_doc(self):
+    def test_warns_sphinx_redundant_return_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -498,7 +498,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_sphinx_redundant_rtype_doc(self):
+    def test_warns_sphinx_redundant_rtype_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -514,7 +514,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_google_redundant_return_doc(self):
+    def test_warns_google_redundant_return_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -531,7 +531,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_google_redundant_rtype_doc(self):
+    def test_warns_google_redundant_rtype_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -548,7 +548,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_numpy_redundant_return_doc(self):
+    def test_warns_numpy_redundant_return_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -567,7 +567,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_numpy_redundant_rtype_doc(self):
+    def test_warns_numpy_redundant_rtype_doc(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -585,7 +585,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_ignores_sphinx_redundant_return_doc_multiple_returns(self):
+    def test_ignores_sphinx_redundant_return_doc_multiple_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -605,7 +605,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_google_redundant_return_doc_multiple_returns(self):
+    def test_ignores_google_redundant_return_doc_multiple_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -622,7 +622,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_numpy_redundant_return_doc_multiple_returns(self):
+    def test_ignores_numpy_redundant_return_doc_multiple_returns(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -643,7 +643,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignore_sphinx_redundant_return_doc_yield(self):
+    def test_ignore_sphinx_redundant_return_doc_yield(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func_with_yield(self):
@@ -659,7 +659,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_warns_google_redundant_return_doc_yield(self):
+    def test_warns_google_redundant_return_doc_yield(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -676,7 +676,7 @@
         ):
             self.checker.visit_functiondef(node)
 
-    def test_warns_numpy_redundant_return_doc_yield(self):
+    def test_warns_numpy_redundant_return_doc_yield(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
diff --git a/tests/extensions/test_check_yields_docs.py b/tests/extensions/test_check_yields_docs.py
index 9cdee9e..a0b9c0d 100644
--- a/tests/extensions/test_check_yields_docs.py
+++ b/tests/extensions/test_check_yields_docs.py
@@ -27,7 +27,7 @@
 
     CHECKER_CLASS = DocstringParameterChecker
 
-    def test_ignores_no_docstring(self):
+    def test_ignores_no_docstring(self) -> None:
         yield_node = astroid.extract_node(
             """
         def my_func(self):
@@ -38,7 +38,7 @@
             self.checker.visit_yield(yield_node)
 
     @set_config(accept_no_yields_doc=False)
-    def test_warns_no_docstring(self):
+    def test_warns_no_docstring(self) -> None:
         node = astroid.extract_node(
             """
         def my_func(self):
@@ -52,7 +52,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_ignores_unknown_style(self):
+    def test_ignores_unknown_style(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -63,7 +63,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_warn_partial_sphinx_yields(self):
+    def test_warn_partial_sphinx_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -80,7 +80,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_partial_sphinx_yields_type(self):
+    def test_warn_partial_sphinx_yields_type(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -95,7 +95,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-yield-doc", node=node)):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_missing_sphinx_yields(self):
+    def test_warn_missing_sphinx_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -114,7 +114,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_partial_google_yields(self):
+    def test_warn_partial_google_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -132,7 +132,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_partial_google_yields_type(self):
+    def test_warn_partial_google_yields_type(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -148,7 +148,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-yield-doc", node=node)):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_missing_google_yields(self):
+    def test_warn_missing_google_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -167,7 +167,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_warn_missing_numpy_yields(self):
+    def test_warn_missing_numpy_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self, doc_type):
@@ -188,7 +188,7 @@
         ):
             self.checker.visit_yield(yield_node)
 
-    def test_find_sphinx_yields(self):
+    def test_find_sphinx_yields(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -203,7 +203,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_find_google_yields(self):
+    def test_find_google_yields(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -218,7 +218,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_find_numpy_yields(self):
+    def test_find_numpy_yields(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -235,7 +235,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_sphinx_yield_custom_class(self):
+    def test_finds_sphinx_yield_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -250,7 +250,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_google_yield_custom_class(self):
+    def test_finds_google_yield_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -265,7 +265,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_numpy_yield_custom_class(self):
+    def test_finds_numpy_yield_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -282,7 +282,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_sphinx_yield_list_of_custom_class(self):
+    def test_finds_sphinx_yield_list_of_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -297,7 +297,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_google_yield_list_of_custom_class(self):
+    def test_finds_google_yield_list_of_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -312,7 +312,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_finds_numpy_yield_list_of_custom_class(self):
+    def test_finds_numpy_yield_list_of_custom_class(self) -> None:
         yield_node = astroid.extract_node(
             '''
         def my_func(self):
@@ -329,7 +329,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_warns_sphinx_yield_list_of_custom_class_without_description(self):
+    def test_warns_sphinx_yield_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -344,7 +344,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-yield-doc", node=node)):
             self.checker.visit_yield(yield_node)
 
-    def test_warns_google_yield_list_of_custom_class_without_description(self):
+    def test_warns_google_yield_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -360,7 +360,7 @@
         with self.assertAddsMessages(Message(msg_id="missing-yield-doc", node=node)):
             self.checker.visit_yield(yield_node)
 
-    def test_warns_numpy_yield_list_of_custom_class_without_description(self):
+    def test_warns_numpy_yield_list_of_custom_class_without_description(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -380,7 +380,7 @@
     # No such thing as redundant yield documentation for sphinx because it
     # doesn't support yield documentation
 
-    def test_ignores_google_redundant_yield_doc_multiple_yields(self):
+    def test_ignores_google_redundant_yield_doc_multiple_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -397,7 +397,7 @@
         with self.assertNoMessages():
             self.checker.visit_functiondef(node)
 
-    def test_ignores_numpy_redundant_yield_doc_multiple_yields(self):
+    def test_ignores_numpy_redundant_yield_doc_multiple_yields(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -421,7 +421,7 @@
     # No such thing as redundant yield documentation for sphinx because it
     # doesn't support yield documentation
 
-    def test_warns_google_redundant_yield_doc_return(self):
+    def test_warns_google_redundant_yield_doc_return(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -436,7 +436,7 @@
         with self.assertAddsMessages(Message(msg_id="redundant-yields-doc", node=node)):
             self.checker.visit_functiondef(node)
 
-    def test_warns_numpy_redundant_yield_doc_return(self):
+    def test_warns_numpy_redundant_yield_doc_return(self) -> None:
         node = astroid.extract_node(
             '''
         def my_func(self):
@@ -453,7 +453,7 @@
         with self.assertAddsMessages(Message(msg_id="redundant-yields-doc", node=node)):
             self.checker.visit_functiondef(node)
 
-    def test_sphinx_missing_yield_type_with_annotations(self):
+    def test_sphinx_missing_yield_type_with_annotations(self) -> None:
         node = astroid.extract_node(
             '''
             import typing
@@ -470,7 +470,7 @@
         with self.assertNoMessages():
             self.checker.visit_yield(yield_node)
 
-    def test_google_missing_yield_type_with_annotations(self):
+    def test_google_missing_yield_type_with_annotations(self) -> None:
         node = astroid.extract_node(
             '''
             import typing
diff --git a/tests/extensions/test_comparetozero.py b/tests/extensions/test_comparetozero.py
index 89b18a4..167a615 100644
--- a/tests/extensions/test_comparetozero.py
+++ b/tests/extensions/test_comparetozero.py
@@ -22,7 +22,7 @@
 
 
 class CompareToZeroTestReporter(BaseReporter):
-    def on_set_current_module(self, module, filepath):
+    def on_set_current_module(self, module: str, filepath: str) -> None:
         self.messages = []
 
     def _display(self, layout):
@@ -30,15 +30,16 @@
 
 
 class CompareToZeroUsedTC(unittest.TestCase):
+    _linter = PyLinter()
+
     @classmethod
-    def setUpClass(cls):
-        cls._linter = PyLinter()
+    def setUpClass(cls) -> None:
         cls._linter.set_reporter(CompareToZeroTestReporter())
         checkers.initialize(cls._linter)
         cls._linter.register_checker(CompareToZeroChecker(cls._linter))
         cls._linter.disable("I")
 
-    def test_comparetozero_message(self):
+    def test_comparetozero_message(self) -> None:
         elif_test = os.path.join(
             os.path.dirname(os.path.abspath(__file__)), "data", "compare_to_zero.py"
         )
diff --git a/tests/extensions/test_confusing_elif.py b/tests/extensions/test_confusing_elif.py
index a8d7096..65fd9ba 100644
--- a/tests/extensions/test_confusing_elif.py
+++ b/tests/extensions/test_confusing_elif.py
@@ -21,7 +21,7 @@
 
     CHECKER_CLASS = ConfusingConsecutiveElifChecker
 
-    def test_triggered_if_if_block_ends_with_elif(self):
+    def test_triggered_if_if_block_ends_with_elif(self) -> None:
         """
         Given an if-elif construct
         When the body of the if ends with an elif
@@ -43,7 +43,7 @@
         ):
             self.checker.visit_if(if_node_to_test)
 
-    def test_triggered_if_elif_block_ends_with_elif(self):
+    def test_triggered_if_elif_block_ends_with_elif(self) -> None:
         """
         Given an if-elif-elif construct
         When the body of the first elif ends with an elif
@@ -67,7 +67,7 @@
         ):
             self.checker.visit_if(if_node_to_test)
 
-    def test_triggered_if_block_ends_with_if(self):
+    def test_triggered_if_block_ends_with_if(self) -> None:
         """
         Given an if-elif construct
         When the body of the if ends with an if
@@ -87,7 +87,7 @@
         ):
             self.checker.visit_if(if_node_to_test)
 
-    def test_not_triggered_if_indented_block_ends_with_else(self):
+    def test_not_triggered_if_indented_block_ends_with_else(self) -> None:
         """
         Given an if-elif construct
         When the body of the if ends with an else
@@ -107,7 +107,7 @@
         with self.assertNoMessages():
             self.checker.visit_if(if_node_to_test)
 
-    def test_not_triggered_if_indentend_block_ends_with_call(self):
+    def test_not_triggered_if_indentend_block_ends_with_call(self) -> None:
         """
         Given an if-elif construct
         When the body of the if ends with a function call
@@ -131,7 +131,7 @@
         with self.assertNoMessages():
             self.checker.visit_if(if_node_to_test)
 
-    def test_not_triggered_if_indented_block_ends_with_ifexp(self):
+    def test_not_triggered_if_indented_block_ends_with_ifexp(self) -> None:
         """
         Given an if-elif construct
         When the body of the if ends with an if expression
@@ -152,7 +152,7 @@
         with self.assertNoMessages():
             self.checker.visit_if(if_node_to_test)
 
-    def test_not_triggered_if_outer_block_does_not_have_elif(self):
+    def test_not_triggered_if_outer_block_does_not_have_elif(self) -> None:
         """
         Given an if construct without an elif
         When the body of the if ends with an if
@@ -174,7 +174,7 @@
         with self.assertNoMessages():
             self.checker.visit_if(if_node_to_test)
 
-    def test_not_triggered_if_outer_block_continues_with_if(self):
+    def test_not_triggered_if_outer_block_continues_with_if(self) -> None:
         """
         Given an if construct which continues with a new if construct
         When the body of the first if ends with an if expression
diff --git a/tests/extensions/test_docstyle.py b/tests/extensions/test_docstyle.py
index 8e002ea..5155783 100644
--- a/tests/extensions/test_docstyle.py
+++ b/tests/extensions/test_docstyle.py
@@ -17,6 +17,7 @@
 import pytest
 
 from pylint.extensions.docstyle import DocStringStyleChecker
+from pylint.lint.pylinter import PyLinter
 
 EXPECTED_MSGS = [
     "First line empty in function docstring",
@@ -44,7 +45,7 @@
     return DocStringStyleChecker
 
 
-def test_docstring_message(linter):
+def test_docstring_message(linter: PyLinter) -> None:
     docstring_test = join(dirname(abspath(__file__)), "data", "docstring.py")
     linter.check([docstring_test])
     msgs = linter.reporter.messages
diff --git a/tests/extensions/test_elseif_used.py b/tests/extensions/test_elseif_used.py
index 21e006e..0fbfa73 100644
--- a/tests/extensions/test_elseif_used.py
+++ b/tests/extensions/test_elseif_used.py
@@ -17,6 +17,7 @@
 import pytest
 
 from pylint.extensions.check_elif import ElseifUsedChecker
+from pylint.lint.pylinter import PyLinter
 
 
 @pytest.fixture(scope="module")
@@ -24,7 +25,7 @@
     return ElseifUsedChecker
 
 
-def test_elseif_message(linter):
+def test_elseif_message(linter: PyLinter) -> None:
     elif_test = osp.join(osp.dirname(osp.abspath(__file__)), "data", "elif.py")
     linter.check([elif_test])
     msgs = linter.reporter.messages
diff --git a/tests/extensions/test_empty_comment.py b/tests/extensions/test_empty_comment.py
index b53f31d..42d1b51 100644
--- a/tests/extensions/test_empty_comment.py
+++ b/tests/extensions/test_empty_comment.py
@@ -3,6 +3,7 @@
 import pytest
 
 from pylint.extensions import empty_comment
+from pylint.lint.pylinter import PyLinter
 
 
 @pytest.fixture(scope="module")
@@ -20,7 +21,7 @@
     return ["all"]
 
 
-def test_comment_base_case(linter):
+def test_comment_base_case(linter: PyLinter) -> None:
     comment_test = str(Path(__file__).parent.joinpath("data", "empty_comment.py"))
     linter.check([comment_test])
     msgs = linter.reporter.messages
diff --git a/tests/extensions/test_emptystring.py b/tests/extensions/test_emptystring.py
index 3b84129..95143c9 100644
--- a/tests/extensions/test_emptystring.py
+++ b/tests/extensions/test_emptystring.py
@@ -19,6 +19,7 @@
 import pytest
 
 from pylint.extensions.emptystring import CompareToEmptyStringChecker
+from pylint.lint.pylinter import PyLinter
 
 
 @pytest.fixture(scope="module")
@@ -31,7 +32,7 @@
     return ["I"]
 
 
-def test_emptystring_message(linter):
+def test_emptystring_message(linter: PyLinter) -> None:
     elif_test = osp.join(
         osp.dirname(osp.abspath(__file__)), "data", "empty_string_comparison.py"
     )
diff --git a/tests/extensions/test_overlapping_exceptions.py b/tests/extensions/test_overlapping_exceptions.py
index 34a5be9..005e0bc 100644
--- a/tests/extensions/test_overlapping_exceptions.py
+++ b/tests/extensions/test_overlapping_exceptions.py
@@ -9,6 +9,7 @@
 import pytest
 
 from pylint.extensions.overlapping_exceptions import OverlappingExceptionsChecker
+from pylint.lint.pylinter import PyLinter
 
 
 @pytest.fixture(scope="module")
@@ -21,7 +22,7 @@
     return ["I"]
 
 
-def test_overlapping_exceptions(linter):
+def test_overlapping_exceptions(linter: PyLinter) -> None:
     test = join(dirname(__file__), "data", "overlapping_exceptions.py")
     linter.check([test])
     msgs = linter.reporter.messages
@@ -64,7 +65,7 @@
         assert (msg.line, msg.msg) == exp
 
 
-def test_overlapping_exceptions_py33(linter):
+def test_overlapping_exceptions_py33(linter: PyLinter) -> None:
     """From Python 3.3 both IOError and socket.error are aliases for OSError."""
     test = join(dirname(__file__), "data", "overlapping_exceptions_py33.py")
     linter.check([test])
diff --git a/tests/extensions/test_redefined.py b/tests/extensions/test_redefined.py
index 91f1ae7..ad95d45 100644
--- a/tests/extensions/test_redefined.py
+++ b/tests/extensions/test_redefined.py
@@ -16,6 +16,7 @@
 
 from pylint.extensions.redefined_variable_type import MultipleTypesChecker
 from pylint.lint import fix_import_path
+from pylint.lint.pylinter import PyLinter
 
 EXPECTED = [
     "Redefinition of self.var1 type from int to float",
@@ -41,7 +42,7 @@
     return ["I"]
 
 
-def test_types_redefined(linter):
+def test_types_redefined(linter: PyLinter) -> None:
     elif_test = osp.join(osp.dirname(osp.abspath(__file__)), "data", "redefined.py")
     with fix_import_path([elif_test]):
         linter.check([elif_test])
diff --git a/tests/extensions/test_while_used.py b/tests/extensions/test_while_used.py
index 23fe95f..3bf081a 100644
--- a/tests/extensions/test_while_used.py
+++ b/tests/extensions/test_while_used.py
@@ -11,7 +11,7 @@
 
     CHECKER_CLASS = WhileChecker
 
-    def test_while_used(self):
+    def test_while_used(self) -> None:
         node = astroid.extract_node(
             """
         def f():
diff --git a/tests/lint/test_pylinter.py b/tests/lint/test_pylinter.py
index f075314..a1ea535 100644
--- a/tests/lint/test_pylinter.py
+++ b/tests/lint/test_pylinter.py
@@ -1,16 +1,23 @@
+from typing import Any
 from unittest.mock import patch
 
+from _pytest.capture import CaptureFixture
 from astroid import AstroidBuildingError
+from mypy_extensions import NoReturn
+from py._path.local import LocalPath  # type: ignore
 
+from pylint.lint.pylinter import PyLinter
 from pylint.utils import FileState
 
 
-def raise_exception(*args, **kwargs):
+def raise_exception(*args: Any, **kwargs: Any) -> NoReturn:
     raise AstroidBuildingError(modname="spam")
 
 
 @patch.object(FileState, "iter_spurious_suppression_messages", raise_exception)
-def test_crash_in_file(linter, capsys, tmpdir):
+def test_crash_in_file(
+    linter: PyLinter, capsys: CaptureFixture, tmpdir: LocalPath
+) -> None:
     args = linter.load_command_line_configuration([__file__])
     linter.crash_file_path = str(tmpdir / "pylint-crash-%Y")
     linter.check(args)
diff --git a/tests/lint/test_utils.py b/tests/lint/test_utils.py
index 7fcdc5d..80e7287 100644
--- a/tests/lint/test_utils.py
+++ b/tests/lint/test_utils.py
@@ -1,7 +1,9 @@
+from pathlib import PosixPath
+
 from pylint.lint.utils import get_fatal_error_message, prepare_crash_report
 
 
-def test_prepare_crash_report(tmp_path):
+def test_prepare_crash_report(tmp_path: PosixPath) -> None:
     exception_content = "Exmessage"
     python_file = tmp_path / "myfile.py"
     python_content = "from shadok import MagicFaucet"
@@ -22,7 +24,7 @@
     assert "raise Exception(exception_content)" in template_content
 
 
-def test_get_fatal_error_message():
+def test_get_fatal_error_message() -> None:
     python_path = "mypath.py"
     crash_path = "crash.txt"
     msg = get_fatal_error_message(python_path, crash_path)
diff --git a/tests/lint/unittest_expand_modules.py b/tests/lint/unittest_expand_modules.py
index f3ec836..ef98cf5 100644
--- a/tests/lint/unittest_expand_modules.py
+++ b/tests/lint/unittest_expand_modules.py
@@ -10,7 +10,7 @@
 from pylint.lint.expand_modules import _is_in_ignore_list_re, expand_modules
 
 
-def test__is_in_ignore_list_re_match():
+def test__is_in_ignore_list_re_match() -> None:
     patterns = [
         re.compile(".*enchilada.*"),
         re.compile("unittest_.*"),
@@ -21,7 +21,7 @@
     assert _is_in_ignore_list_re("src/tests/whatever.xml", patterns)
 
 
-def test__is_in_ignore_list_re_nomatch():
+def test__is_in_ignore_list_re_nomatch() -> None:
     patterns = [
         re.compile(".*enchilada.*"),
         re.compile("unittest_.*"),
diff --git a/tests/lint/unittest_lint.py b/tests/lint/unittest_lint.py
index 110a206..18656ad 100644
--- a/tests/lint/unittest_lint.py
+++ b/tests/lint/unittest_lint.py
@@ -48,9 +48,11 @@
 from os import chdir, getcwd
 from os.path import abspath, basename, dirname, isdir, join, sep
 from shutil import rmtree
+from typing import Iterable, Iterator, List, Optional, Tuple
 
 import platformdirs
 import pytest
+from _pytest.capture import CaptureFixture
 
 from pylint import checkers, config, exceptions, interfaces, lint, testutils
 from pylint.checkers.utils import check_messages
@@ -78,7 +80,7 @@
 
 
 @contextmanager
-def fake_home():
+def fake_home() -> Iterator:
     folder = tempfile.mkdtemp("fake-home")
     old_home = os.environ.get(HOME)
     try:
@@ -107,7 +109,7 @@
 
 
 @contextmanager
-def tempdir():
+def tempdir() -> Iterator[str]:
     """Create a temp directory and change the current location to it.
 
     This is supposed to be used with a *with* statement.
@@ -126,7 +128,7 @@
         rmtree(abs_tmp)
 
 
-def create_files(paths, chroot="."):
+def create_files(paths: List[str], chroot: str = ".") -> None:
     """Creates directories and files found in <path>.
 
     :param list paths: list of relative paths to files or directories
@@ -165,15 +167,15 @@
 
 
 @pytest.fixture
-def fake_path():
+def fake_path() -> Iterator[Iterable[str]]:
     orig = list(sys.path)
-    fake = [1, 2, 3]
+    fake: Iterable[str] = ["1", "2", "3"]
     sys.path[:] = fake
     yield fake
     sys.path[:] = orig
 
 
-def test_no_args(fake_path):
+def test_no_args(fake_path: List[int]) -> None:
     with lint.fix_import_path([]):
         assert sys.path == fake_path
     assert sys.path == fake_path
@@ -182,7 +184,7 @@
 @pytest.mark.parametrize(
     "case", [["a/b/"], ["a/b"], ["a/b/__init__.py"], ["a/"], ["a"]]
 )
-def test_one_arg(fake_path, case):
+def test_one_arg(fake_path: List[str], case: List[str]) -> None:
     with tempdir() as chroot:
         create_files(["a/b/__init__.py"])
         expected = [join(chroot, "a")] + fake_path
@@ -246,14 +248,14 @@
 
 
 @pytest.fixture
-def init_linter(linter):
+def init_linter(linter: PyLinter) -> PyLinter:
     linter.open()
     linter.set_current_module("toto")
     linter.file_state = FileState("toto")
     return linter
 
 
-def test_pylint_visit_method_taken_in_account(linter):
+def test_pylint_visit_method_taken_in_account(linter: PyLinter) -> None:
     class CustomChecker(checkers.BaseChecker):
         __implements__ = interfaces.IAstroidChecker
         name = "custom"
@@ -270,7 +272,7 @@
     linter.check("abc")
 
 
-def test_enable_message(init_linter):
+def test_enable_message(init_linter: PyLinter) -> None:
     linter = init_linter
     assert linter.is_message_enabled("W0101")
     assert linter.is_message_enabled("W0102")
@@ -287,7 +289,7 @@
     assert linter.is_message_enabled("W0102", 1)
 
 
-def test_enable_message_category(init_linter):
+def test_enable_message_category(init_linter: PyLinter) -> None:
     linter = init_linter
     assert linter.is_message_enabled("W0101")
     assert linter.is_message_enabled("C0202")
@@ -306,7 +308,7 @@
     assert linter.is_message_enabled("C0202", line=1)
 
 
-def test_message_state_scope(init_linter):
+def test_message_state_scope(init_linter: PyLinter) -> None:
     class FakeConfig:
         confidence = ["HIGH"]
 
@@ -324,7 +326,7 @@
     )
 
 
-def test_enable_message_block(init_linter):
+def test_enable_message_block(init_linter: PyLinter) -> None:
     linter = init_linter
     linter.open()
     filepath = join(REGRTEST_DATA_DIR, "func_block_disable_msg.py")
@@ -382,7 +384,7 @@
     assert fs._suppression_mapping["E1101", 110] == 109
 
 
-def test_enable_by_symbol(init_linter):
+def test_enable_by_symbol(init_linter: PyLinter) -> None:
     """messages can be controlled by symbolic names.
 
     The state is consistent across symbols and numbers.
@@ -411,7 +413,7 @@
     assert linter.is_message_enabled("dangerous-default-value", 1)
 
 
-def test_enable_report(linter):
+def test_enable_report(linter: PyLinter) -> None:
     assert linter.report_is_enabled("RP0001")
     linter.disable("RP0001")
     assert not linter.report_is_enabled("RP0001")
@@ -419,19 +421,19 @@
     assert linter.report_is_enabled("RP0001")
 
 
-def test_report_output_format_aliased(linter):
+def test_report_output_format_aliased(linter: PyLinter) -> None:
     text.register(linter)
     linter.set_option("output-format", "text")
     assert linter.reporter.__class__.__name__ == "TextReporter"
 
 
-def test_set_unsupported_reporter(linter):
+def test_set_unsupported_reporter(linter: PyLinter) -> None:
     text.register(linter)
     with pytest.raises(exceptions.InvalidReporterError):
         linter.set_option("output-format", "missing.module.Class")
 
 
-def test_set_option_1(linter):
+def test_set_option_1(linter: PyLinter) -> None:
     linter.set_option("disable", "C0111,W0234")
     assert not linter.is_message_enabled("C0111")
     assert not linter.is_message_enabled("W0234")
@@ -440,7 +442,7 @@
     assert not linter.is_message_enabled("non-iterator-returned")
 
 
-def test_set_option_2(linter):
+def test_set_option_2(linter: PyLinter) -> None:
     linter.set_option("disable", ("C0111", "W0234"))
     assert not linter.is_message_enabled("C0111")
     assert not linter.is_message_enabled("W0234")
@@ -449,14 +451,14 @@
     assert not linter.is_message_enabled("non-iterator-returned")
 
 
-def test_enable_checkers(linter):
+def test_enable_checkers(linter: PyLinter) -> None:
     linter.disable("design")
     assert not ("design" in [c.name for c in linter.prepare_checkers()])
     linter.enable("design")
     assert "design" in [c.name for c in linter.prepare_checkers()]
 
 
-def test_errors_only(linter):
+def test_errors_only(linter: PyLinter) -> None:
     linter.error_mode()
     checkers = linter.prepare_checkers()
     checker_names = {c.name for c in checkers}
@@ -464,13 +466,13 @@
     assert set() == should_not & checker_names
 
 
-def test_disable_similar(linter):
+def test_disable_similar(linter: PyLinter) -> None:
     linter.set_option("disable", "RP0801")
     linter.set_option("disable", "R0801")
     assert not ("similarities" in [c.name for c in linter.prepare_checkers()])
 
 
-def test_disable_alot(linter):
+def test_disable_alot(linter: PyLinter) -> None:
     """check that we disabled a lot of checkers"""
     linter.set_option("reports", False)
     linter.set_option("disable", "R,C,W")
@@ -479,7 +481,7 @@
         assert not (cname in checker_names), cname
 
 
-def test_addmessage(linter):
+def test_addmessage(linter: PyLinter) -> None:
     linter.set_reporter(testutils.GenericTestReporter())
     linter.open()
     linter.set_current_module("0123")
@@ -491,7 +493,7 @@
     ] == linter.reporter.messages
 
 
-def test_addmessage_invalid(linter):
+def test_addmessage_invalid(linter: PyLinter) -> None:
     linter.set_reporter(testutils.GenericTestReporter())
     linter.open()
     linter.set_current_module("0123")
@@ -512,7 +514,7 @@
     assert str(cm.value) == "Message C0321 must provide Node, got None"
 
 
-def test_load_plugin_command_line():
+def test_load_plugin_command_line() -> None:
     dummy_plugin_path = join(REGRTEST_DATA_DIR, "dummy_plugin")
     sys.path.append(dummy_plugin_path)
 
@@ -528,7 +530,7 @@
     sys.path.remove(dummy_plugin_path)
 
 
-def test_load_plugin_config_file():
+def test_load_plugin_config_file() -> None:
     dummy_plugin_path = join(REGRTEST_DATA_DIR, "dummy_plugin")
     sys.path.append(dummy_plugin_path)
     config_path = join(REGRTEST_DATA_DIR, "dummy_plugin.rc")
@@ -545,7 +547,7 @@
     sys.path.remove(dummy_plugin_path)
 
 
-def test_load_plugin_configuration():
+def test_load_plugin_configuration() -> None:
     dummy_plugin_path = join(REGRTEST_DATA_DIR, "dummy_plugin")
     sys.path.append(dummy_plugin_path)
 
@@ -562,20 +564,20 @@
     assert run.linter.config.black_list == ["foo", "bar", "bin"]
 
 
-def test_init_hooks_called_before_load_plugins():
+def test_init_hooks_called_before_load_plugins() -> None:
     with pytest.raises(RuntimeError):
         Run(["--load-plugins", "unexistant", "--init-hook", "raise RuntimeError"])
     with pytest.raises(RuntimeError):
         Run(["--init-hook", "raise RuntimeError", "--load-plugins", "unexistant"])
 
 
-def test_analyze_explicit_script(linter):
+def test_analyze_explicit_script(linter: PyLinter) -> None:
     linter.set_reporter(testutils.GenericTestReporter())
     linter.check(os.path.join(DATA_DIR, "ascript"))
     assert ["C:  2: Line too long (175/100)"] == linter.reporter.messages
 
 
-def test_full_documentation(linter):
+def test_full_documentation(linter: PyLinter) -> None:
     out = StringIO()
     linter.print_full_documentation(out)
     output = out.getvalue()
@@ -593,7 +595,7 @@
         assert re.search(regexp, output)
 
 
-def test_list_msgs_enabled(init_linter, capsys):
+def test_list_msgs_enabled(init_linter: PyLinter, capsys: CaptureFixture) -> None:
     linter = init_linter
     linter.enable("W0101", scope="package")
     linter.disable("W0102", scope="package")
@@ -616,12 +618,12 @@
 
 
 @pytest.fixture
-def pop_pylintrc():
+def pop_pylintrc() -> None:
     os.environ.pop("PYLINTRC", None)
 
 
 @pytest.mark.usefixtures("pop_pylintrc")
-def test_pylint_home():
+def test_pylint_home() -> None:
     uhome = os.path.expanduser("~")
     if uhome == "~":
         expected = ".pylint.d"
@@ -645,7 +647,7 @@
 
 
 @pytest.mark.usefixtures("pop_pylintrc")
-def test_pylintrc():
+def test_pylintrc() -> None:
     with fake_home():
         current_dir = getcwd()
         chdir(os.path.dirname(os.path.abspath(sys.executable)))
@@ -661,7 +663,7 @@
 
 
 @pytest.mark.usefixtures("pop_pylintrc")
-def test_pylintrc_parentdir():
+def test_pylintrc_parentdir() -> None:
     with tempdir() as chroot:
 
         create_files(
@@ -689,7 +691,7 @@
 
 
 @pytest.mark.usefixtures("pop_pylintrc")
-def test_pylintrc_parentdir_no_package():
+def test_pylintrc_parentdir_no_package() -> None:
     with tempdir() as chroot:
         with fake_home():
             create_files(["a/pylintrc", "a/b/pylintrc", "a/b/c/d/__init__.py"])
@@ -706,31 +708,31 @@
 
 
 class TestPreprocessOptions:
-    def _callback(self, name, value):
+    def _callback(self, name: str, value: Optional[str]) -> None:
         self.args.append((name, value))
 
-    def test_value_equal(self):
-        self.args = []
+    def test_value_equal(self) -> None:
+        self.args: List[Tuple[str, Optional[str]]] = []
         preprocess_options(
             ["--foo", "--bar=baz", "--qu=ux"],
             {"foo": (self._callback, False), "qu": (self._callback, True)},
         )
         assert [("foo", None), ("qu", "ux")] == self.args
 
-    def test_value_space(self):
+    def test_value_space(self) -> None:
         self.args = []
         preprocess_options(["--qu", "ux"], {"qu": (self._callback, True)})
         assert [("qu", "ux")] == self.args
 
     @staticmethod
-    def test_error_missing_expected_value():
+    def test_error_missing_expected_value() -> None:
         with pytest.raises(ArgumentPreprocessingError):
             preprocess_options(["--foo", "--bar", "--qu=ux"], {"bar": (None, True)})
         with pytest.raises(ArgumentPreprocessingError):
             preprocess_options(["--foo", "--bar"], {"bar": (None, True)})
 
     @staticmethod
-    def test_error_unexpected_value():
+    def test_error_unexpected_value() -> None:
         with pytest.raises(ArgumentPreprocessingError):
             preprocess_options(
                 ["--foo", "--bar=spam", "--qu=ux"], {"bar": (None, False)}
@@ -739,14 +741,17 @@
 
 class _CustomPyLinter(PyLinter):
     # pylint: disable=too-many-ancestors
-    def should_analyze_file(self, modname, path, is_argument=False):
+    @staticmethod
+    def should_analyze_file(modname: str, path: str, is_argument: bool = False) -> bool:
         if os.path.basename(path) == "wrong.py":
             return False
 
-        return super().should_analyze_file(modname, path, is_argument=is_argument)
+        return super(_CustomPyLinter, _CustomPyLinter).should_analyze_file(
+            modname, path, is_argument=is_argument
+        )
 
 
-def test_custom_should_analyze_file():
+def test_custom_should_analyze_file() -> None:
     """Check that we can write custom should_analyze_file that work
     even for arguments.
     """
@@ -775,7 +780,7 @@
 # we do the check with jobs=1 as well, so that we are sure that the duplicates
 # are created by the multiprocessing problem.
 @pytest.mark.parametrize("jobs", [1, 2])
-def test_multiprocessing(jobs):
+def test_multiprocessing(jobs: int) -> None:
     """Check that multiprocessing does not create duplicates."""
     # For the bug (#3584) to show up we need more than one file with issues
     # per process
@@ -804,7 +809,7 @@
     assert len(messages) == len(set(messages))
 
 
-def test_filename_with__init__(init_linter):
+def test_filename_with__init__(init_linter: PyLinter) -> None:
     # This tracks a regression where a file whose name ends in __init__.py,
     # such as flycheck__init__.py, would accidentally lead to linting the
     # entire containing directory.
@@ -818,7 +823,7 @@
     assert len(messages) == 0
 
 
-def test_by_module_statement_value(init_linter):
+def test_by_module_statement_value(init_linter: PyLinter) -> None:
     """Test "statement" for each module analized of computed correctly."""
     linter = init_linter
     linter.check(os.path.join(os.path.dirname(__file__), "data"))
diff --git a/tests/message/conftest.py b/tests/message/conftest.py
index 9421190..e30dbb5 100644
--- a/tests/message/conftest.py
+++ b/tests/message/conftest.py
@@ -3,10 +3,12 @@
 # pylint: disable=redefined-outer-name
 
 
+from typing import Dict, ValuesView
+
 import pytest
 
 from pylint.checkers import BaseChecker
-from pylint.message import MessageDefinitionStore, MessageIdStore
+from pylint.message import MessageDefinition, MessageDefinitionStore, MessageIdStore
 
 
 @pytest.fixture
@@ -20,12 +22,12 @@
 
 
 @pytest.fixture
-def empty_store():
+def empty_store() -> MessageDefinitionStore:
     return MessageDefinitionStore()
 
 
 @pytest.fixture
-def store():
+def store() -> MessageDefinitionStore:
     store_ = MessageDefinitionStore()
 
     class Checker(BaseChecker):
@@ -50,12 +52,12 @@
 
 
 @pytest.fixture
-def message_definitions(store):
+def message_definitions(store: MessageDefinitionStore) -> ValuesView[MessageDefinition]:
     return store.messages
 
 
 @pytest.fixture
-def msgids():
+def msgids() -> Dict[str, str]:
     return {
         "W1234": "warning-symbol",
         "W1235": "warning-symbol-two",
@@ -65,12 +67,12 @@
 
 
 @pytest.fixture
-def empty_msgid_store():
+def empty_msgid_store() -> MessageIdStore:
     return MessageIdStore()
 
 
 @pytest.fixture
-def msgid_store(msgids):
+def msgid_store(msgids: Dict[str, str]) -> MessageIdStore:
     msgid_store = MessageIdStore()
     for msgid, symbol in msgids.items():
         msgid_store.add_msgid_and_symbol(msgid, symbol)
diff --git a/tests/message/unittest_message.py b/tests/message/unittest_message.py
index 5a02c26..6f8b4aa 100644
--- a/tests/message/unittest_message.py
+++ b/tests/message/unittest_message.py
@@ -1,11 +1,16 @@
 # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
 
+from typing import Dict, ValuesView
+
 from pylint.message import Message
+from pylint.message.message_definition import MessageDefinition
 
 
-def test_new_message(message_definitions):
-    def build_message(message_definition, location_value):
+def test_new_message(message_definitions: ValuesView[MessageDefinition]) -> None:
+    def build_message(
+        message_definition: MessageDefinition, location_value: Dict[str, str]
+    ) -> Message:
         return Message(
             symbol=message_definition.symbol,
             msg_id=message_definition.msgid,
diff --git a/tests/message/unittest_message_definition.py b/tests/message/unittest_message_definition.py
index 7434994..2015c21 100644
--- a/tests/message/unittest_message_definition.py
+++ b/tests/message/unittest_message_definition.py
@@ -46,7 +46,7 @@
 
 class TestMessagesDefinition:
     @staticmethod
-    def assert_with_fail_msg(msg, expected=True):
+    def assert_with_fail_msg(msg: MessageDefinition, expected: bool = True) -> None:
         fail_msg = (
             f"With minversion='{msg.minversion}' and maxversion='{msg.maxversion}',"
             f" and the python interpreter being {sys.version_info} "
@@ -58,19 +58,19 @@
             assert not msg.may_be_emitted(), fail_msg.format(" not ")
 
     @staticmethod
-    def get_message_definition():
-        args = [
+    def get_message_definition() -> MessageDefinition:
+        kwargs = {"minversion": None, "maxversion": None}
+        return MessageDefinition(
             FalseChecker(),
             "W1234",
             "message",
             "description",
             "msg-symbol",
             WarningScope.NODE,
-        ]
-        kwargs = {"minversion": None, "maxversion": None}
-        return MessageDefinition(*args, **kwargs)
+            **kwargs,
+        )
 
-    def test_may_be_emitted(self):
+    def test_may_be_emitted(self) -> None:
         major = sys.version_info.major
         minor = sys.version_info.minor
         msg = self.get_message_definition()
@@ -85,7 +85,7 @@
         msg.maxversion = (major, minor - 1)
         self.assert_with_fail_msg(msg, expected=False)
 
-    def test_repr(self):
+    def test_repr(self) -> None:
         msg = self.get_message_definition()
         repr_str = str([msg, msg])
         assert "W1234" in repr_str
@@ -93,7 +93,7 @@
         expected = "[MessageDefinition:msg-symbol-one (W1234), MessageDefinition:msg-symbol-two (W1235)]"
         assert str(FalseChecker().messages) == expected
 
-    def test_str(self):
+    def test_str(self) -> None:
         msg = self.get_message_definition()
         str_msg = str(msg)
         assert "W1234" in str_msg
@@ -102,7 +102,7 @@
 message one msg description"""
         assert str(FalseChecker().messages[0]) == expected
 
-    def test_format_help(self):
+    def test_format_help(self) -> None:
         msg = self.get_message_definition()
         major = sys.version_info.major
         minor = sys.version_info.minor
diff --git a/tests/message/unittest_message_definition_store.py b/tests/message/unittest_message_definition_store.py
index a08ca7c..4d10848 100644
--- a/tests/message/unittest_message_definition_store.py
+++ b/tests/message/unittest_message_definition_store.py
@@ -5,10 +5,12 @@
 from io import StringIO
 
 import pytest
+from _pytest.capture import CaptureFixture
 
 from pylint.checkers import BaseChecker
 from pylint.exceptions import InvalidMessageError, UnknownMessageError
 from pylint.message import MessageDefinition
+from pylint.message.message_definition_store import MessageDefinitionStore
 
 
 @pytest.mark.parametrize(
@@ -126,7 +128,9 @@
     assert str(cm.value) == expected
 
 
-def test_register_error_new_id_duplicate_of_new(empty_store):
+def test_register_error_new_id_duplicate_of_new(
+    empty_store: MessageDefinitionStore,
+) -> None:
     class CheckerOne(BaseChecker):
         name = "checker_one"
         msgs = {"W1234": ("message one", "msg-symbol-one", "msg description.")}
@@ -143,7 +147,7 @@
     )
 
 
-def test_format_help(capsys, store):
+def test_format_help(capsys: CaptureFixture, store: MessageDefinitionStore) -> None:
     store.help_message([])
     captured = capsys.readouterr()
     assert captured.out == ""
@@ -165,12 +169,12 @@
     )
 
 
-def test_get_msg_display_string(store):
+def test_get_msg_display_string(store: MessageDefinitionStore) -> None:
     assert store.get_msg_display_string("W1234") == "'msg-symbol'"
     assert store.get_msg_display_string("E1234") == "'duplicate-keyword-arg'"
 
 
-def test_check_message_id(store):
+def test_check_message_id(store: MessageDefinitionStore) -> None:
     w1234 = store.get_message_definitions("W1234")[0]
     w0001 = store.get_message_definitions("W0001")[0]
     e1234 = store.get_message_definitions("E1234")[0]
@@ -185,10 +189,12 @@
 
 class TestMessageDefinitionStore:
     @staticmethod
-    def _compare_messages(desc, msg, checkerref=False):
+    def _compare_messages(
+        desc: str, msg: MessageDefinition, checkerref: bool = False
+    ) -> None:
         assert desc == msg.format_help(checkerref=checkerref)
 
-    def test_message_help(self, store):
+    def test_message_help(self, store: MessageDefinitionStore) -> None:
         message_definition = store.get_message_definitions("W1234")[0]
         self._compare_messages(
             """:msg-symbol (W1234): *message*
@@ -203,7 +209,7 @@
             checkerref=False,
         )
 
-    def test_message_help_minmax(self, store):
+    def test_message_help_minmax(self, store: MessageDefinitionStore) -> None:
         # build the message manually to be python version independent
         message_definition = store.get_message_definitions("E1234")[0]
         self._compare_messages(
@@ -223,7 +229,7 @@
         )
 
 
-def test_list_messages(store):
+def test_list_messages(store: MessageDefinitionStore) -> None:
     output = StringIO()
     with redirect_stdout(output):
         store.list_messages()
@@ -231,12 +237,12 @@
     assert ":msg-symbol (W1234): *message*" in output.getvalue()
 
 
-def test_renamed_message_register(store):
+def test_renamed_message_register(store: MessageDefinitionStore) -> None:
     assert store.get_message_definitions("W0001")[0].symbol == "msg-symbol"
     assert store.get_message_definitions("old-symbol")[0].symbol == "msg-symbol"
 
 
-def test_multiple_child_of_old_name(store):
+def test_multiple_child_of_old_name(store: MessageDefinitionStore) -> None:
     """We can define multiple name with the same old name."""
 
     class FamillyChecker(BaseChecker):
@@ -263,7 +269,5 @@
     assert len(mother) == 2
     assert len(child) == 1
     assert len(other_child) == 1
-    child = child[0]
-    other_child = other_child[0]
-    assert child in mother
-    assert other_child in mother
+    assert child[0] in mother
+    assert other_child[0] in mother
diff --git a/tests/message/unittest_message_id_store.py b/tests/message/unittest_message_id_store.py
index e61aba6..340b23d 100644
--- a/tests/message/unittest_message_id_store.py
+++ b/tests/message/unittest_message_id_store.py
@@ -1,12 +1,16 @@
 # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
 
+from typing import Dict, ValuesView
+
 import pytest
 
 from pylint.exceptions import InvalidMessageError, UnknownMessageError
+from pylint.message.message_definition import MessageDefinition
+from pylint.message.message_id_store import MessageIdStore
 
 
-def test_len_str(msgid_store, msgids):
+def test_len_str(msgid_store: MessageIdStore, msgids: Dict[str, str]) -> None:
     assert len(msgid_store) == len(msgids)
     str_result = str(msgid_store)
     assert "MessageIdStore: [" in str_result
@@ -17,7 +21,7 @@
     assert "]" in str_result
 
 
-def test_get_message_ids(msgid_store, msgids):
+def test_get_message_ids(msgid_store: MessageIdStore, msgids: Dict[str, str]) -> None:
     """We can get message id even with capitalization problem."""
     msgid = list(msgids.keys())[0]
     msgids_result = msgid_store.get_active_msgids(msgid.lower())
@@ -25,14 +29,17 @@
     assert msgid == msgids_result[0]
 
 
-def test_get_message_ids_not_existing(empty_msgid_store):
+def test_get_message_ids_not_existing(empty_msgid_store: MessageIdStore) -> None:
     with pytest.raises(UnknownMessageError) as error:
         w9876 = "W9876"
         empty_msgid_store.get_active_msgids(w9876)
     assert w9876 in str(error.value)
 
 
-def test_register_message_definitions(empty_msgid_store, message_definitions):
+def test_register_message_definitions(
+    empty_msgid_store: MessageIdStore,
+    message_definitions: ValuesView[MessageDefinition],
+) -> None:
     number_of_msgid = len(message_definitions)
     for message_definition in message_definitions:
         empty_msgid_store.register_message_definition(
@@ -45,7 +52,7 @@
     assert len(empty_msgid_store) == number_of_msgid
 
 
-def test_add_msgid_and_symbol(empty_msgid_store):
+def test_add_msgid_and_symbol(empty_msgid_store: MessageIdStore) -> None:
     empty_msgid_store.add_msgid_and_symbol("E1235", "new-sckiil")
     empty_msgid_store.add_legacy_msgid_and_symbol("C1235", "old-sckiil", "E1235")
     assert len(empty_msgid_store) == 2
@@ -65,7 +72,7 @@
         empty_msgid_store.get_msgid("not-exist")
 
 
-def test_duplicate_symbol(empty_msgid_store):
+def test_duplicate_symbol(empty_msgid_store: MessageIdStore) -> None:
     empty_msgid_store.add_msgid_and_symbol("W1234", "warning-symbol")
     with pytest.raises(InvalidMessageError) as error:
         empty_msgid_store.check_msgid_and_symbol("W1234", "other-symbol")
@@ -75,7 +82,7 @@
     )
 
 
-def test_duplicate_msgid(msgid_store):
+def test_duplicate_msgid(msgid_store: MessageIdStore) -> None:
     msgid_store.add_msgid_and_symbol("W1234", "warning-symbol")
     with pytest.raises(InvalidMessageError) as error:
         msgid_store.check_msgid_and_symbol("W1235", "warning-symbol")
diff --git a/tests/pyreverse/conftest.py b/tests/pyreverse/conftest.py
index 9829801..3a03784 100644
--- a/tests/pyreverse/conftest.py
+++ b/tests/pyreverse/conftest.py
@@ -1,6 +1,7 @@
-from typing import Callable, Optional, Tuple
+from typing import Callable, List, Optional, Tuple
 
 import pytest
+from astroid.nodes.scoped_nodes import Module
 
 from pylint.pyreverse.inspector import Project, project_from_files
 
@@ -14,7 +15,7 @@
     def __init__(
         self,
         mode: str = "PUB_ONLY",
-        classes: Tuple = tuple(),
+        classes: Optional[List[str]] = None,
         show_ancestors: Optional[int] = None,
         all_ancestors: Optional[bool] = None,
         show_associated: Optional[int] = None,
@@ -30,7 +31,10 @@
         output_directory: str = "",
     ):
         self.mode = mode
-        self.classes = classes
+        if classes:
+            self.classes = classes
+        else:
+            self.classes = []
         self.show_ancestors = show_ancestors
         self.all_ancestors = all_ancestors
         self.show_associated = show_associated
@@ -86,7 +90,7 @@
     def _get_project(module: str, name: Optional[str] = "No Name") -> Project:
         """return an astroid project representation"""
 
-        def _astroid_wrapper(func, modname):
+        def _astroid_wrapper(func: Callable, modname: str) -> Module:
             return func(modname)
 
         return project_from_files([module], _astroid_wrapper, project_name=name)
diff --git a/tests/pyreverse/test_diadefs.py b/tests/pyreverse/test_diadefs.py
index 497e1ee..3c2ab7f 100644
--- a/tests/pyreverse/test_diadefs.py
+++ b/tests/pyreverse/test_diadefs.py
@@ -22,9 +22,11 @@
 # pylint: disable=redefined-outer-name
 import sys
 from pathlib import Path
+from typing import Callable, Dict, List, Tuple
 
 import pytest
 from astroid import nodes
+from conftest import PyreverseConfig  # type: ignore #pylint: disable=no-name-in-module
 
 from pylint.pyreverse.diadefslib import (
     ClassDiadefGenerator,
@@ -32,15 +34,18 @@
     DiaDefGenerator,
     DiadefsHandler,
 )
-from pylint.pyreverse.inspector import Linker
+from pylint.pyreverse.diagrams import DiagramEntity, Relationship
+from pylint.pyreverse.inspector import Linker, Project
 
 
-def _process_classes(classes):
+def _process_classes(classes: List[DiagramEntity]) -> List[Tuple[bool, str]]:
     """extract class names of a list"""
     return sorted((isinstance(c.node, nodes.ClassDef), c.title) for c in classes)
 
 
-def _process_relations(relations):
+def _process_relations(
+    relations: Dict[str, List[Relationship]]
+) -> List[Tuple[str, str, str]]:
     """extract relation indices from a relation list"""
     result = []
     for rel_type, rels in relations.items():
@@ -51,7 +56,7 @@
 
 
 @pytest.fixture
-def HANDLER(default_config):
+def HANDLER(default_config: PyreverseConfig) -> DiadefsHandler:
     return DiadefsHandler(default_config)
 
 
@@ -60,7 +65,9 @@
     return get_project("data")
 
 
-def test_option_values(default_config, HANDLER, PROJECT):
+def test_option_values(
+    default_config: PyreverseConfig, HANDLER: DiadefsHandler, PROJECT: Project
+) -> None:
     """test for ancestor, associated and module options"""
     df_h = DiaDefGenerator(Linker(PROJECT), HANDLER)
     cl_config = default_config
@@ -91,7 +98,7 @@
         assert not hndl.module_names
 
 
-def test_default_values():
+def test_default_values() -> None:
     """test default values for package or class diagrams"""
     # TODO : should test difference between default values for package or class diagrams pylint: disable=fixme
 
@@ -105,14 +112,18 @@
         ("specialization", "Specialization", "Ancestor"),
     ]
 
-    def test_exctract_relations(self, HANDLER, PROJECT):
+    def test_exctract_relations(
+        self, HANDLER: DiadefsHandler, PROJECT: Project
+    ) -> None:
         """test extract_relations between classes"""
         cd = DefaultDiadefGenerator(Linker(PROJECT), HANDLER).visit(PROJECT)[1]
         cd.extract_relationships()
         relations = _process_relations(cd.relationships)
         assert relations == self._should_rels
 
-    def test_functional_relation_extraction(self, default_config, get_project):
+    def test_functional_relation_extraction(
+        self, default_config: PyreverseConfig, get_project: Callable
+    ) -> None:
         """functional test of relations extraction;
         different classes possibly in different modules"""
         # XXX should be catching pyreverse environnement problem but doesn't
@@ -125,7 +136,7 @@
         assert relations == self._should_rels
 
 
-def test_known_values1(HANDLER, PROJECT):
+def test_known_values1(HANDLER: DiadefsHandler, PROJECT: Project) -> None:
     dd = DefaultDiadefGenerator(Linker(PROJECT), HANDLER).visit(PROJECT)
     assert len(dd) == 2
     keys = [d.TYPE for d in dd]
@@ -152,7 +163,7 @@
     ]
 
 
-def test_known_values2(HANDLER, get_project):
+def test_known_values2(HANDLER: DiadefsHandler, get_project: Callable) -> None:
     project = get_project("data.clientmodule_test")
     dd = DefaultDiadefGenerator(Linker(project), HANDLER).visit(project)
     assert len(dd) == 1
@@ -164,7 +175,7 @@
     assert classes == [(True, "Ancestor"), (True, "Specialization")]
 
 
-def test_known_values3(HANDLER, PROJECT):
+def test_known_values3(HANDLER: DiadefsHandler, PROJECT: Project) -> None:
     HANDLER.config.classes = ["Specialization"]
     cdg = ClassDiadefGenerator(Linker(PROJECT), HANDLER)
     special = "data.clientmodule_test.Specialization"
@@ -179,7 +190,7 @@
     ]
 
 
-def test_known_values4(HANDLER, PROJECT):
+def test_known_values4(HANDLER: DiadefsHandler, PROJECT: Project) -> None:
     HANDLER.config.classes = ["Specialization"]
     HANDLER.config.module_names = False
     cd = ClassDiadefGenerator(Linker(PROJECT), HANDLER).class_diagram(
@@ -196,7 +207,9 @@
 
 
 @pytest.mark.skipif(sys.version_info < (3, 8), reason="Requires dataclasses")
-def test_regression_dataclasses_inference(HANDLER, get_project):
+def test_regression_dataclasses_inference(
+    HANDLER: DiadefsHandler, get_project: Callable
+) -> None:
     project_path = Path("regrtest_data") / "dataclasses_pyreverse"
     path = get_project(str(project_path))
 
diff --git a/tests/pyreverse/test_inspector.py b/tests/pyreverse/test_inspector.py
index 0c8873f..0148385 100644
--- a/tests/pyreverse/test_inspector.py
+++ b/tests/pyreverse/test_inspector.py
@@ -17,23 +17,25 @@
 # pylint: disable=redefined-outer-name
 
 import os
+from typing import Callable
 
 import astroid
 import pytest
 from astroid import nodes
 
 from pylint.pyreverse import inspector
+from pylint.pyreverse.inspector import Project
 
 
 @pytest.fixture
-def project(get_project):
+def project(get_project: Callable) -> Project:
     project = get_project("data", "data")
     linker = inspector.Linker(project)
     linker.visit(project)
     return project
 
 
-def test_class_implements(project):
+def test_class_implements(project: Project) -> None:
     klass = project.get_module("data.clientmodule_test")["Ancestor"]
     assert hasattr(klass, "implements")
     assert len(klass.implements) == 1
@@ -41,13 +43,13 @@
     assert klass.implements[0].name == "Interface"
 
 
-def test_class_implements_specialization(project):
+def test_class_implements_specialization(project: Project) -> None:
     klass = project.get_module("data.clientmodule_test")["Specialization"]
     assert hasattr(klass, "implements")
     assert len(klass.implements) == 0
 
 
-def test_locals_assignment_resolution(project):
+def test_locals_assignment_resolution(project: Project) -> None:
     klass = project.get_module("data.clientmodule_test")["Specialization"]
     assert hasattr(klass, "locals_type")
     type_dict = klass.locals_type
@@ -60,7 +62,7 @@
     assert type_dict["top"][0].value == "class"
 
 
-def test_instance_attrs_resolution(project):
+def test_instance_attrs_resolution(project: Project) -> None:
     klass = project.get_module("data.clientmodule_test")["Specialization"]
     assert hasattr(klass, "instance_attrs_type")
     type_dict = klass.instance_attrs_type
@@ -74,7 +76,7 @@
     assert type_dict["_id"][0] is astroid.Uninferable
 
 
-def test_concat_interfaces():
+def test_concat_interfaces() -> None:
     cls = astroid.extract_node(
         '''
         class IMachin: pass
@@ -96,7 +98,7 @@
     assert [i.name for i in interfaces] == ["IMachin"]
 
 
-def test_interfaces():
+def test_interfaces() -> None:
     module = astroid.parse(
         """
     class Interface(object): pass
@@ -122,12 +124,12 @@
         assert [i.name for i in inspector.interfaces(klass)] == interfaces
 
 
-def test_from_directory(project):
+def test_from_directory(project: Project) -> None:
     expected = os.path.join("tests", "data", "__init__.py")
     assert project.name == "data"
     assert project.path.endswith(expected)
 
 
-def test_project_node(project):
+def test_project_node(project: Project) -> None:
     expected = ["data", "data.clientmodule_test", "data.suppliermodule_test"]
     assert sorted(project.keys()) == expected
diff --git a/tests/pyreverse/test_printer.py b/tests/pyreverse/test_printer.py
index 77d12f6..b5606e3 100644
--- a/tests/pyreverse/test_printer.py
+++ b/tests/pyreverse/test_printer.py
@@ -47,6 +47,6 @@
 class TestPlantUmlPrinter:
     printer = PlantUmlPrinter(title="unittest", layout=Layout.TOP_TO_BOTTOM)
 
-    def test_node_without_properties(self):
+    def test_node_without_properties(self) -> None:
         self.printer.emit_node(name="test", type_=NodeType.CLASS)
         assert self.printer.lines[-2:] == ['class "test" as test {\n', "}\n"]
diff --git a/tests/pyreverse/test_utils.py b/tests/pyreverse/test_utils.py
index 1d231ea..5abd012 100644
--- a/tests/pyreverse/test_utils.py
+++ b/tests/pyreverse/test_utils.py
@@ -9,6 +9,7 @@
 
 """Tests for pylint.pyreverse.utils"""
 
+from typing import Any
 from unittest.mock import patch
 
 import astroid
@@ -80,8 +81,8 @@
 
 
 @patch("pylint.pyreverse.utils.get_annotation")
-@patch("astroid.nodes.NodeNG.infer", side_effect=astroid.InferenceError)
-def test_infer_node_1(mock_infer, mock_get_annotation):
+@patch("astroid.node_classes.NodeNG.infer", side_effect=astroid.InferenceError)
+def test_infer_node_1(mock_infer: Any, mock_get_annotation: Any) -> None:
     """Return set() when astroid.InferenceError is raised and an annotation has
     not been returned
     """
@@ -93,8 +94,8 @@
 
 
 @patch("pylint.pyreverse.utils.get_annotation")
-@patch("astroid.nodes.NodeNG.infer")
-def test_infer_node_2(mock_infer, mock_get_annotation):
+@patch("astroid.node_classes.NodeNG.infer")
+def test_infer_node_2(mock_infer: Any, mock_get_annotation: Any) -> None:
     """Return set(node.infer()) when InferenceError is not raised and an
     annotation has not been returned
     """
@@ -105,7 +106,7 @@
     assert mock_infer.called
 
 
-def test_infer_node_3():
+def test_infer_node_3() -> None:
     """Return a set containing a nodes.ClassDef object when the attribute
     has a type annotation"""
     node = astroid.extract_node(
@@ -123,7 +124,7 @@
     assert isinstance(infer_node(instance_attr).pop(), nodes.ClassDef)
 
 
-def test_infer_node_4():
+def test_infer_node_4() -> None:
     """Verify the label for an argument with a typehint of the type
     nodes.Subscript
     """
diff --git a/tests/pyreverse/test_writer.py b/tests/pyreverse/test_writer.py
index 66a150b..28ed160 100644
--- a/tests/pyreverse/test_writer.py
+++ b/tests/pyreverse/test_writer.py
@@ -24,12 +24,14 @@
 import codecs
 import os
 from difflib import unified_diff
+from typing import Callable, Iterator, List
 from unittest.mock import Mock
 
 import pytest
+from conftest import PyreverseConfig  # type: ignore
 
 from pylint.pyreverse.diadefslib import DefaultDiadefGenerator, DiadefsHandler
-from pylint.pyreverse.inspector import Linker
+from pylint.pyreverse.inspector import Linker, Project
 from pylint.pyreverse.writer import DiagramWriter
 
 _DEFAULTS = {
@@ -57,7 +59,7 @@
             setattr(self, attr, value)
 
 
-def _file_lines(path):
+def _file_lines(path: str) -> List[str]:
     # we don't care about the actual encoding, but python3 forces us to pick one
     with codecs.open(path, encoding="latin1") as stream:
         lines = [
@@ -79,14 +81,16 @@
 
 
 @pytest.fixture()
-def setup_dot(default_config, get_project):
+def setup_dot(default_config: PyreverseConfig, get_project: Callable) -> Iterator:
     writer = DiagramWriter(default_config)
     project = get_project(os.path.join(os.path.dirname(__file__), "..", "data"))
     yield from _setup(project, default_config, writer)
 
 
 @pytest.fixture()
-def setup_colorized_dot(colorized_dot_config, get_project):
+def setup_colorized_dot(
+    colorized_dot_config: PyreverseConfig, get_project: Callable
+) -> Iterator:
     writer = DiagramWriter(colorized_dot_config)
     project = get_project(
         os.path.join(os.path.dirname(__file__), "..", "data"), name="colorized"
@@ -95,21 +99,23 @@
 
 
 @pytest.fixture()
-def setup_vcg(vcg_config, get_project):
+def setup_vcg(vcg_config: PyreverseConfig, get_project: Callable) -> Iterator:
     writer = DiagramWriter(vcg_config)
     project = get_project(os.path.join(os.path.dirname(__file__), "..", "data"))
     yield from _setup(project, vcg_config, writer)
 
 
 @pytest.fixture()
-def setup_puml(puml_config, get_project):
+def setup_puml(puml_config: PyreverseConfig, get_project: Callable) -> Iterator:
     writer = DiagramWriter(puml_config)
     project = get_project(os.path.join(os.path.dirname(__file__), "..", "data"))
     yield from _setup(project, puml_config, writer)
 
 
 @pytest.fixture()
-def setup_colorized_puml(colorized_puml_config, get_project):
+def setup_colorized_puml(
+    colorized_puml_config: PyreverseConfig, get_project: Callable
+) -> Iterator:
     writer = DiagramWriter(colorized_puml_config)
     project = get_project(
         os.path.join(os.path.dirname(__file__), "..", "data"), name="colorized"
@@ -117,7 +123,9 @@
     yield from _setup(project, colorized_puml_config, writer)
 
 
-def _setup(project, config, writer):
+def _setup(
+    project: Project, config: PyreverseConfig, writer: DiagramWriter
+) -> Iterator:
     linker = Linker(project)
     handler = DiadefsHandler(config)
     dd = DefaultDiadefGenerator(linker, handler).visit(project)
@@ -136,48 +144,51 @@
 
 @pytest.mark.usefixtures("setup_dot")
 @pytest.mark.parametrize("generated_file", DOT_FILES)
-def test_dot_files(generated_file):
+def test_dot_files(generated_file: str) -> None:
     _assert_files_are_equal(generated_file)
 
 
 @pytest.mark.usefixtures("setup_colorized_dot")
 @pytest.mark.parametrize("generated_file", COLORIZED_DOT_FILES)
-def test_colorized_dot_files(generated_file):
+def test_colorized_dot_files(generated_file: str) -> None:
     _assert_files_are_equal(generated_file)
 
 
 @pytest.mark.usefixtures("setup_vcg")
 @pytest.mark.parametrize("generated_file", VCG_FILES)
-def test_vcg_files(generated_file):
+def test_vcg_files(generated_file: str) -> None:
     _assert_files_are_equal(generated_file)
 
 
 @pytest.mark.usefixtures("setup_puml")
 @pytest.mark.parametrize("generated_file", PUML_FILES)
-def test_puml_files(generated_file):
+def test_puml_files(generated_file: str) -> None:
     _assert_files_are_equal(generated_file)
 
 
 @pytest.mark.usefixtures("setup_colorized_puml")
 @pytest.mark.parametrize("generated_file", COLORIZED_PUML_FILES)
-def test_colorized_puml_files(generated_file):
+def test_colorized_puml_files(generated_file: str) -> None:
     _assert_files_are_equal(generated_file)
 
 
-def _assert_files_are_equal(generated_file):
+def _assert_files_are_equal(generated_file: str) -> None:
     expected_file = os.path.join(os.path.dirname(__file__), "data", generated_file)
     generated = _file_lines(generated_file)
     expected = _file_lines(expected_file)
-    generated = "\n".join(generated)
-    expected = "\n".join(expected)
+    joined_generated = "\n".join(generated)
+    joined_expected = "\n".join(expected)
     files = f"\n *** expected : {expected_file}, generated : {generated_file} \n"
     diff = "\n".join(
-        line for line in unified_diff(expected.splitlines(), generated.splitlines())
+        line
+        for line in unified_diff(
+            joined_expected.splitlines(), joined_generated.splitlines()
+        )
     )
-    assert expected == generated, f"{files}{diff}"
+    assert joined_expected == joined_generated, f"{files}{diff}"
 
 
-def test_color_for_stdlib_module(default_config):
+def test_color_for_stdlib_module(default_config: PyreverseConfig) -> None:
     writer = DiagramWriter(default_config)
     obj = Mock()
     obj.node = Mock()
diff --git a/tests/regrtest_data/dummy_plugin/dummy_plugin.py b/tests/regrtest_data/dummy_plugin/dummy_plugin.py
index 95b0b93..dd0554f 100644
--- a/tests/regrtest_data/dummy_plugin/dummy_plugin.py
+++ b/tests/regrtest_data/dummy_plugin/dummy_plugin.py
@@ -1,4 +1,5 @@
 from pylint.checkers import BaseChecker
+from pylint.lint.pylinter import PyLinter
 
 
 class DummyPlugin1(BaseChecker):
@@ -25,6 +26,6 @@
     )
 
 
-def register(linter):
+def register(linter: PyLinter) -> None:
     linter.register_checker(DummyPlugin1(linter))
     linter.register_checker(DummyPlugin2(linter))
diff --git a/tests/test_check_parallel.py b/tests/test_check_parallel.py
index 6e94ed7..f87f818 100644
--- a/tests/test_check_parallel.py
+++ b/tests/test_check_parallel.py
@@ -11,8 +11,10 @@
 
 import collections
 import os
+from typing import List, Tuple
 
 import pytest
+from astroid.nodes.scoped_nodes import Module
 
 import pylint.interfaces
 import pylint.lint.parallel
@@ -24,7 +26,7 @@
 from pylint.testutils import GenericTestReporter as Reporter
 
 
-def _gen_file_data(idx=0):
+def _gen_file_data(idx: int = 0) -> Tuple[str, str, str]:
     """Generates a file to use as a stream"""
     filepath = os.path.abspath(
         os.path.join(os.path.dirname(__file__), "input", "similar1")
@@ -37,7 +39,7 @@
     return file_data
 
 
-def _gen_file_datas(count=1):
+def _gen_file_datas(count: int = 1) -> List[Tuple[str, str, str]]:
     return [_gen_file_data(idx) for idx in range(count)]
 
 
@@ -56,12 +58,12 @@
         )
     }
 
-    def __init__(self, linter, *args, **kwargs):
-        super().__init__(linter, *args, **kwargs)
-        self.data = []
+    def __init__(self, linter: PyLinter) -> None:
+        super().__init__(linter)
+        self.data: List[str] = []
         self.linter = linter
 
-    def process_module(self, _astroid):
+    def process_module(self, _astroid: Module) -> None:
         """Called once per stream/file/astroid object"""
         # record the number of invocations with the data object
         record = self.test_data + str(len(self.data))
@@ -95,25 +97,25 @@
         )
     }
 
-    def __init__(self, linter, *args, **kwargs):
-        super().__init__(linter, *args, **kwargs)
-        self.data = []
+    def __init__(self, linter: PyLinter) -> None:
+        super().__init__(linter)
+        self.data: List[str] = []
         self.linter = linter
         self.stats = None
 
-    def open(self):
+    def open(self) -> None:
         """init the checkers: reset statistics information"""
         self.stats = self.linter.add_stats()
         self.data = []
 
-    def close(self):
+    def close(self) -> None:
         for _ in self.data[1::2]:  # Work on pairs of files, see class docstring.
             self.add_message("R9999", args=("From process_module, two files seen.",))
 
     def get_map_data(self):
         return self.data
 
-    def reduce_map_data(self, linter, data):
+    def reduce_map_data(self, linter: PyLinter, data: List[List[str]]) -> None:
         recombined = type(self)(linter)
         recombined.open()
         aggregated = []
@@ -123,7 +125,7 @@
             self.add_message("R9999", args=("From reduce_map_data",))
         recombined.close()
 
-    def process_module(self, _astroid):
+    def process_module(self, _astroid: Module) -> None:
         """Called once per stream/file/astroid object"""
         # record the number of invocations with the data object
         record = self.test_data + str(len(self.data))
@@ -167,19 +169,19 @@
     def teardown_class(self):
         pylint.lint.parallel._worker_linter = self._prev_global_linter
 
-    def test_worker_initialize(self):
+    def test_worker_initialize(self) -> None:
         linter = PyLinter(reporter=Reporter())
         worker_initialize(linter=linter)
         assert pylint.lint.parallel._worker_linter == linter
 
-    def test_worker_check_single_file_uninitialised(self):
+    def test_worker_check_single_file_uninitialised(self) -> None:
         pylint.lint.parallel._worker_linter = None
         with pytest.raises(  # Objects that do not match the linter interface will fail
             AttributeError, match="'NoneType' object has no attribute 'open'"
         ):
             worker_check_single_file(_gen_file_data())
 
-    def test_worker_check_single_file_no_checkers(self):
+    def test_worker_check_single_file_no_checkers(self) -> None:
         linter = PyLinter(reporter=Reporter())
         worker_initialize(linter=linter)
 
@@ -219,7 +221,7 @@
             "warning": 0,
         } == stats
 
-    def test_worker_check_sequential_checker(self):
+    def test_worker_check_sequential_checker(self) -> None:
         """Same as test_worker_check_single_file_no_checkers with SequentialTestChecker"""
         linter = PyLinter(reporter=Reporter())
         worker_initialize(linter=linter)
@@ -269,7 +271,7 @@
 class TestCheckParallel:
     """Tests the check_parallel() function"""
 
-    def test_sequential_checkers_work(self):
+    def test_sequential_checkers_work(self) -> None:
         """Tests original basic types of checker works as expected in -jN
 
         This means that a sequential checker should return the same data for a given
@@ -340,7 +342,7 @@
             "warning": 0,
         } == linter.stats
 
-    def test_invoke_single_job(self):
+    def test_invoke_single_job(self) -> None:
         """Tests basic checkers functionality using just a single workderdo
 
         This is *not* the same -j1 and does not happen under normal operation"""
diff --git a/tests/test_config.py b/tests/test_config.py
index 1c33ef0..7a4b096 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -1,14 +1,16 @@
 # pylint: disable=missing-module-docstring, missing-function-docstring, protected-access
 import os
 import unittest.mock
+from pathlib import PosixPath
 
 import pytest
 
 import pylint.lint
 from pylint.config import OptionsManagerMixIn
+from pylint.lint.run import Run
 
 
-def check_configuration_file_reader(config_file):
+def check_configuration_file_reader(config_file: PosixPath) -> Run:
     """Initialize pylint with the given configuration file and check that
     what we initialized the linter with what was expected.
     """
@@ -34,7 +36,7 @@
     return runner
 
 
-def test_can_read_ini(tmp_path):
+def test_can_read_ini(tmp_path: PosixPath) -> None:
     # Check that we can read the "regular" INI .pylintrc file
     config_file = tmp_path / ".pylintrc"
     config_file.write_text(
@@ -48,7 +50,7 @@
     check_configuration_file_reader(config_file)
 
 
-def test_can_read_setup_cfg(tmp_path):
+def test_can_read_setup_cfg(tmp_path: PosixPath) -> None:
     # Check that we can read a setup.cfg (which is an INI file where
     # section names are prefixed with "pylint."
     config_file = tmp_path / "setup.cfg"
@@ -63,7 +65,7 @@
     check_configuration_file_reader(config_file)
 
 
-def test_can_read_toml(tmp_path):
+def test_can_read_toml(tmp_path: PosixPath) -> None:
     # Check that we can read a TOML file where lists and integers are
     # expressed as strings.
     config_file = tmp_path / "pyproject.toml"
@@ -78,7 +80,7 @@
     check_configuration_file_reader(config_file)
 
 
-def test_can_read_toml_rich_types(tmp_path):
+def test_can_read_toml_rich_types(tmp_path: PosixPath) -> None:
     # Check that we can read a TOML file where lists, integers and
     # booleans are expressed as such (and not as strings), using TOML
     # type system.
@@ -97,7 +99,7 @@
     check_configuration_file_reader(config_file)
 
 
-def test_can_read_env_variable(tmp_path):
+def test_can_read_env_variable(tmp_path: PosixPath) -> None:
     # Check that we can read the "regular" INI .pylintrc file
     # if it has an environment variable.
     config_file = tmp_path / "pyproject.toml"
@@ -113,7 +115,7 @@
     options_manager_mix_in = OptionsManagerMixIn("", "${tmp_path_env}")
     options_manager_mix_in.read_config_file("${tmp_path_env}")
 
-    def test_read_config_file():
+    def test_read_config_file() -> None:
         with pytest.raises(OSError):
             options_manager_mix_in.read_config_file("${tmp_path_en}")
 
diff --git a/tests/test_epylint.py b/tests/test_epylint.py
index 796b1ca..4f2d2aa 100644
--- a/tests/test_epylint.py
+++ b/tests/test_epylint.py
@@ -1,12 +1,14 @@
 """Test for issue https://github.com/PyCQA/pylint/issues/4286"""
 # pylint: disable=redefined-outer-name
+from pathlib import PosixPath
+
 import pytest
 
 from pylint import epylint as lint
 
 
 @pytest.fixture()
-def example_path(tmp_path):
+def example_path(tmp_path: PosixPath) -> PosixPath:
     content = """class IvrAudioApp:
 
     def run(self):
@@ -18,7 +20,7 @@
     return path
 
 
-def test_epylint_good_command(example_path):
+def test_epylint_good_command(example_path: PosixPath) -> None:
     out, err = lint.py_run(
         # pylint: disable-next=consider-using-f-string
         "%s -E --disable=E1111 --msg-template '{category} {module} {obj} {line} {column} {msg}'"
@@ -36,7 +38,7 @@
     assert err.read() == ""
 
 
-def test_epylint_strange_command(example_path):
+def test_epylint_strange_command(example_path: PosixPath) -> None:
     out, err = lint.py_run(
         # pylint: disable-next=consider-using-f-string
         "%s -E --disable=E1111 --msg-template={category} {module} {obj} {line} {column} {msg}"
diff --git a/tests/test_func.py b/tests/test_func.py
index b57dc7d..98bdf18 100644
--- a/tests/test_func.py
+++ b/tests/test_func.py
@@ -23,6 +23,7 @@
 import re
 import sys
 from os.path import abspath, dirname, join
+from typing import List, Optional, Tuple
 
 import pytest
 
@@ -36,22 +37,24 @@
 INFO_TEST_RGX = re.compile(r"^func_i\d\d\d\d$")
 
 
-def exception_str(self, ex):  # pylint: disable=unused-argument
-    """function used to replace default __str__ method of exception instances"""
+def exception_str(self, ex) -> str:  # pylint: disable=unused-argument
+    """function used to replace default __str__ method of exception instances
+    This function is not typed because it is legacy code"""
     return f"in {ex.file}\n:: {', '.join(ex.args)}"
 
 
 class LintTestUsingModule:
-    INPUT_DIR = None
+    INPUT_DIR: Optional[str] = None
     DEFAULT_PACKAGE = "input"
     package = DEFAULT_PACKAGE
     linter = linter
-    module = None
-    depends = None
-    output = None
+    module: Optional[str] = None
+    depends: Optional[List[Tuple[str, str]]] = None
+    output: Optional[str] = None
 
-    def _test_functionality(self):
-        tocheck = [self.package + "." + self.module]
+    def _test_functionality(self) -> None:
+        if self.module:
+            tocheck = [self.package + "." + self.module]
         # pylint: disable=not-an-iterable; can't handle boolean checks for now
         if self.depends:
             tocheck += [
@@ -59,7 +62,7 @@
             ]
         self._test(tocheck)
 
-    def _check_result(self, got):
+    def _check_result(self, got: str) -> None:
         error_msg = (
             f"Wrong output for '{self.output}':\n"
             "You can update the expected output automatically with: '"
@@ -67,26 +70,27 @@
         )
         assert self._get_expected() == got, error_msg
 
-    def _test(self, tocheck):
-        if INFO_TEST_RGX.match(self.module):
+    def _test(self, tocheck: List[str]) -> None:
+        if self.module and INFO_TEST_RGX.match(self.module):
             self.linter.enable("I")
         else:
             self.linter.disable("I")
         try:
             self.linter.check(tocheck)
         except Exception as ex:
-            # need finalization to restore a correct state
-            self.linter.reporter.finalize()
-            ex.file = tocheck
+            print(f"Exception: {ex} in {tocheck}:: {'‚ '.join(ex.args)}")
+            ex.file = tocheck  # type: ignore # This is legacy code we're trying to remove, not worth it to type correctly
             print(ex)
-            ex.__str__ = exception_str
+            ex.__str__ = exception_str  # type: ignore # This is legacy code we're trying to remove, impossible to type correctly
             raise
         self._check_result(self.linter.reporter.finalize())
 
-    def _has_output(self):
-        return not self.module.startswith("func_noerror_")
+    def _has_output(self) -> bool:
+        return isinstance(self.module, str) and not self.module.startswith(
+            "func_noerror_"
+        )
 
-    def _get_expected(self):
+    def _get_expected(self) -> str:
         if self._has_output() and self.output:
             with open(self.output, encoding="utf-8") as fobj:
                 return fobj.read().strip() + "\n"
@@ -150,7 +154,9 @@
             assert "invalid escape sequence" in str(warning.message)
 
 
-def __test_functionality(module_file, messages_file, dependencies):
+def __test_functionality(
+    module_file: str, messages_file: str, dependencies: List[Tuple[str, str]]
+) -> None:
     lint_test = LintTestUpdate() if UPDATE_FILE.exists() else LintTestUsingModule()
     lint_test.module = module_file.replace(".py", "")
     lint_test.output = messages_file
diff --git a/tests/test_functional.py b/tests/test_functional.py
index 5924af2..513823a 100644
--- a/tests/test_functional.py
+++ b/tests/test_functional.py
@@ -25,11 +25,15 @@
 import csv
 import os
 import sys
+from typing import Union
 
 import pytest
+from _pytest.config import Config
+from _pytest.recwarn import WarningsRecorder
 
 from pylint import testutils
 from pylint.testutils import UPDATE_FILE, UPDATE_OPTION
+from pylint.testutils.functional_test_file import FunctionalTestFile
 from pylint.utils import HAS_ISORT_5
 
 # Notes:
@@ -96,10 +100,14 @@
 
 
 @pytest.mark.parametrize("test_file", TESTS, ids=TESTS_NAMES)
-def test_functional(test_file, recwarn, pytestconfig):
+def test_functional(
+    test_file: FunctionalTestFile, recwarn: WarningsRecorder, pytestconfig: Config
+) -> None:
     __tracebackhide__ = True  # pylint: disable=unused-variable
     if UPDATE_FILE.exists():
-        lint_test = LintModuleOutputUpdate(test_file, pytestconfig)
+        lint_test: Union[
+            LintModuleOutputUpdate, testutils.LintModuleTest
+        ] = LintModuleOutputUpdate(test_file, pytestconfig)
     else:
         lint_test = testutils.LintModuleTest(test_file, pytestconfig)
     lint_test.setUp()
diff --git a/tests/test_import_graph.py b/tests/test_import_graph.py
index b2061c0..8029707 100644
--- a/tests/test_import_graph.py
+++ b/tests/test_import_graph.py
@@ -21,8 +21,10 @@
 import os
 import shutil
 from os.path import exists
+from typing import Iterator, Union
 
 import pytest
+from _pytest.fixtures import SubRequest
 
 from pylint import testutils
 from pylint.checkers import imports, initialize
@@ -30,7 +32,7 @@
 
 
 @pytest.fixture
-def dest(request):
+def dest(request: SubRequest) -> Iterator[Union[Iterator, Iterator[str]]]:
     dest = request.param
     yield dest
     try:
@@ -44,7 +46,7 @@
 
 
 @pytest.mark.parametrize("dest", POSSIBLE_DOT_FILENAMES, indirect=True)
-def test_dependencies_graph(dest):
+def test_dependencies_graph(dest: str) -> None:
     """DOC files are correctly generated, and the graphname is the basename"""
     imports._dependencies_graph(dest, {"labas": ["hoho", "yep"], "hoho": ["yep"]})
     with open(dest, encoding="utf-8") as stream:
@@ -70,21 +72,21 @@
 @pytest.mark.skipif(
     any(shutil.which(x) for x in ("dot", "gv")), reason="dot or gv is installed"
 )
-def test_missing_graphviz(filename):
+def test_missing_graphviz(filename: str) -> None:
     """Raises if graphviz is not installed, and defaults to png if no extension given"""
     with pytest.raises(RuntimeError, match=r"Cannot generate `graph\.png`.*"):
         imports._dependencies_graph(filename, {"a": ["b", "c"], "b": ["c"]})
 
 
 @pytest.fixture
-def linter():
+def linter() -> PyLinter:
     pylinter = PyLinter(reporter=testutils.GenericTestReporter())
     initialize(pylinter)
     return pylinter
 
 
 @pytest.fixture
-def remove_files():
+def remove_files() -> Iterator:
     yield
     for fname in ("import.dot", "ext_import.dot", "int_import.dot"):
         try:
@@ -94,7 +96,7 @@
 
 
 @pytest.mark.usefixtures("remove_files")
-def test_checker_dep_graphs(linter):
+def test_checker_dep_graphs(linter: PyLinter) -> None:
     linter.global_set_option("persistent", False)
     linter.global_set_option("reports", True)
     linter.global_set_option("enable", "imports")
diff --git a/tests/test_pragma_parser.py b/tests/test_pragma_parser.py
index 0dec8ac..473f204 100644
--- a/tests/test_pragma_parser.py
+++ b/tests/test_pragma_parser.py
@@ -8,41 +8,46 @@
 )
 
 
-def test_simple_pragma():
+def test_simple_pragma() -> None:
     comment = "#pylint: disable = missing-docstring"
     match = OPTION_PO.search(comment)
+    assert match
     for pragma_repr in parse_pragma(match.group(2)):
         assert pragma_repr.action == "disable"
         assert pragma_repr.messages == ["missing-docstring"]
 
 
-def test_disable_checker_with_number_in_name():
+def test_disable_checker_with_number_in_name() -> None:
     comment = "#pylint: disable = j3-custom-checker"
     match = OPTION_PO.search(comment)
+    assert match
     for pragma_repr in parse_pragma(match.group(2)):
         assert pragma_repr.action == "disable"
         assert pragma_repr.messages == ["j3-custom-checker"]
 
 
-def test_simple_pragma_no_messages():
+def test_simple_pragma_no_messages() -> None:
     comment = "#pylint: skip-file"
     match = OPTION_PO.search(comment)
+    assert match
     for pragma_repr in parse_pragma(match.group(2)):
         assert pragma_repr.action == "skip-file"
         assert pragma_repr.messages == []
 
 
-def test_simple_pragma_multiple_messages():
+def test_simple_pragma_multiple_messages() -> None:
     comment = "#pylint: disable = missing-docstring, invalid-name"
     match = OPTION_PO.search(comment)
+    assert match
     for pragma_repr in parse_pragma(match.group(2)):
         assert pragma_repr.action == "disable"
         assert pragma_repr.messages == ["missing-docstring", "invalid-name"]
 
 
-def test_multiple_pragma_multiple_messages():
+def test_multiple_pragma_multiple_messages() -> None:
     comment = "#pylint: disable = missing-docstring, invalid-name, enable = R0202, no-self-use"
     match = OPTION_PO.search(comment)
+    assert match
     res = list(parse_pragma(match.group(2)))
     assert res[0].action == "disable"
     assert res[0].messages == ["missing-docstring", "invalid-name"]
@@ -50,51 +55,58 @@
     assert res[1].messages == ["R0202", "no-self-use"]
 
 
-def test_missing_assignment():
+def test_missing_assignment() -> None:
     comment = "#pylint: disable missing-docstring"
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(InvalidPragmaError):
         list(parse_pragma(match.group(2)))
 
 
-def test_missing_keyword():
+def test_missing_keyword() -> None:
     comment = "#pylint: = missing-docstring"
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(InvalidPragmaError):
         list(parse_pragma(match.group(2)))
 
 
-def test_unsupported_assignment():
+def test_unsupported_assignment() -> None:
     comment = "#pylint: disable-all = missing-docstring"
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(UnRecognizedOptionError):
         list(parse_pragma(match.group(2)))
 
 
-def test_unknown_keyword_with_messages():
+def test_unknown_keyword_with_messages() -> None:
     comment = "#pylint: unknown-keyword = missing-docstring"
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(UnRecognizedOptionError):
         list(parse_pragma(match.group(2)))
 
 
-def test_unknown_keyword_without_messages():
+def test_unknown_keyword_without_messages() -> None:
     comment = "#pylint: unknown-keyword"
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(UnRecognizedOptionError):
         list(parse_pragma(match.group(2)))
 
 
-def test_missing_message():
+def test_missing_message() -> None:
     comment = "#pylint: disable = "
     match = OPTION_PO.search(comment)
+    assert match
     with pytest.raises(InvalidPragmaError):
         list(parse_pragma(match.group(2)))
 
 
-def test_parse_message_with_dash():
+def test_parse_message_with_dash() -> None:
     comment = "#pylint: disable = raw_input-builtin"
     match = OPTION_PO.search(comment)
+    assert match
     res = list(parse_pragma(match.group(2)))
     assert res[0].action == "disable"
     assert res[0].messages == ["raw_input-builtin"]
diff --git a/tests/test_pylint_runners.py b/tests/test_pylint_runners.py
index d3d84fb..84ac05c 100644
--- a/tests/test_pylint_runners.py
+++ b/tests/test_pylint_runners.py
@@ -1,9 +1,11 @@
 # pylint: disable=missing-module-docstring, missing-function-docstring
 import os
 import sys
+from typing import Callable
 from unittest.mock import patch
 
 import pytest
+from py._path.local import LocalPath  # type: ignore
 
 from pylint import run_epylint, run_pylint, run_pyreverse, run_symilar
 
@@ -11,7 +13,7 @@
 @pytest.mark.parametrize(
     "runner", [run_epylint, run_pylint, run_pyreverse, run_symilar]
 )
-def test_runner(runner, tmpdir):
+def test_runner(runner: Callable, tmpdir: LocalPath) -> None:
     filepath = os.path.abspath(__file__)
     testargs = ["", filepath]
     with tmpdir.as_cwd():
diff --git a/tests/test_regr.py b/tests/test_regr.py
index 22d5bdf..793a196 100644
--- a/tests/test_regr.py
+++ b/tests/test_regr.py
@@ -23,11 +23,13 @@
 import os
 import sys
 from os.path import abspath, dirname, join
+from typing import Iterator
 
 import astroid
 import pytest
 
 from pylint import testutils
+from pylint.lint.pylinter import PyLinter
 
 REGR_DATA = join(dirname(abspath(__file__)), "regrtest_data")
 sys.path.insert(1, REGR_DATA)
@@ -44,7 +46,7 @@
 
 
 @pytest.fixture
-def finalize_linter(linter):
+def finalize_linter(linter: PyLinter) -> Iterator[PyLinter]:
     """call reporter.finalize() to cleanup
     pending messages if a test finished badly
     """
@@ -91,13 +93,13 @@
 @pytest.mark.parametrize(
     "fname", [x for x in os.listdir(REGR_DATA) if x.endswith("_crash.py")]
 )
-def test_descriptor_crash(fname, finalize_linter):
+def test_descriptor_crash(fname: str, finalize_linter: PyLinter) -> None:
     finalize_linter.check(join(REGR_DATA, fname))
     finalize_linter.reporter.finalize().strip()
 
 
 @pytest.fixture
-def modify_path():
+def modify_path() -> Iterator:
     cwd = os.getcwd()
     sys.path.insert(0, "")
     yield
@@ -106,7 +108,7 @@
 
 
 @pytest.mark.usefixtures("modify_path")
-def test_check_package___init__(finalize_linter):
+def test_check_package___init__(finalize_linter: PyLinter) -> None:
     filename = "package.__init__"
     finalize_linter.check(filename)
     checked = list(finalize_linter.stats["by_module"].keys())
@@ -118,7 +120,7 @@
     assert checked == ["__init__"]
 
 
-def test_pylint_config_attr():
+def test_pylint_config_attr() -> None:
     mod = astroid.MANAGER.ast_from_module_name("pylint.lint.pylinter")
     pylinter = mod["PyLinter"]
     expect = [
diff --git a/tests/test_self.py b/tests/test_self.py
index 2bf6351..9c04441 100644
--- a/tests/test_self.py
+++ b/tests/test_self.py
@@ -51,18 +51,22 @@
 from io import StringIO
 from os.path import abspath, dirname, join
 from pathlib import Path
-from typing import Generator, Optional
+from typing import Any, Generator, Iterator, List, Optional, Union
 from unittest import mock
 from unittest.mock import patch
 
 import pytest
+from _pytest.capture import EncodedFile
+from py._path.local import LocalPath  # type: ignore
 
 from pylint import modify_sys_path
 from pylint.constants import MAIN_CHECKER_NAME, MSG_TYPES_STATUS
 from pylint.lint import Run
+from pylint.lint.pylinter import PyLinter
 from pylint.message import Message
 from pylint.reporters import JSONReporter
 from pylint.reporters.text import BaseReporter, ColorizedTextReporter, TextReporter
+from pylint.reporters.ureports.nodes import EvaluationSection
 from pylint.utils import utils
 
 HERE = abspath(dirname(__file__))
@@ -73,7 +77,7 @@
 
 
 @contextlib.contextmanager
-def _patch_streams(out):
+def _patch_streams(out: Union[StringIO, EncodedFile]) -> Iterator:
     sys.stderr = sys.stdout = out
     try:
         yield
@@ -83,7 +87,7 @@
 
 
 @contextlib.contextmanager
-def _configure_lc_ctype(lc_ctype):
+def _configure_lc_ctype(lc_ctype: str) -> Iterator:
     lc_ctype_env = "LC_CTYPE"
     original_lctype = os.environ.get(lc_ctype_env)
     os.environ[lc_ctype_env] = lc_ctype
@@ -96,7 +100,7 @@
 
 
 class MultiReporter(BaseReporter):
-    def __init__(self, reporters):
+    def __init__(self, reporters: List[BaseReporter]) -> None:
         # pylint: disable=super-init-not-called
         # We don't call it because there is an attribute "linter" that is set inside the base class
         # and we have another setter here using yet undefined attribute.
@@ -104,7 +108,7 @@
         self._reporters = reporters
         self.path_strip_prefix = os.getcwd() + os.sep
 
-    def on_set_current_module(self, *args, **kwargs):
+    def on_set_current_module(self, *args: str, **kwargs: Any) -> None:
         for rep in self._reporters:
             rep.on_set_current_module(*args, **kwargs)
 
@@ -112,26 +116,32 @@
         for rep in self._reporters:
             rep.handle_message(msg)
 
-    def _display(self, layout):
+    def _display(self, layout: EvaluationSection) -> None:
         pass
 
     @property
-    def out(self):
+    def out(self) -> StringIO:
         return self._reporters[0].out
 
     @property
-    def linter(self):
+    def linter(self) -> Optional[Any]:
         return self._linter
 
     @linter.setter
-    def linter(self, value):
+    def linter(self, value: PyLinter) -> None:
         self._linter = value
         for rep in self._reporters:
             rep.linter = value
 
 
 class TestRunTC:
-    def _runtest(self, args, reporter=None, out=None, code=None):
+    def _runtest(
+        self,
+        args: List[str],
+        reporter: Any = None,
+        out: Optional[StringIO] = None,
+        code: int = None,
+    ) -> None:
         if out is None:
             out = StringIO()
         pylint_code = self._run_pylint(args, reporter=reporter, out=out)
@@ -147,7 +157,9 @@
         assert pylint_code == code, msg
 
     @staticmethod
-    def _run_pylint(args, out, reporter=None):
+    def _run_pylint(
+        args: List[str], out: Union[StringIO, EncodedFile], reporter: Any = None
+    ) -> int:
         args = args + ["--persistent=no"]
         with _patch_streams(out):
             with pytest.raises(SystemExit) as cm:
@@ -157,19 +169,21 @@
             return cm.value.code
 
     @staticmethod
-    def _clean_paths(output):
+    def _clean_paths(output: str) -> str:
         """Normalize path to the tests directory."""
         output = re.sub(CLEAN_PATH, "", output, flags=re.MULTILINE)
         return output.replace("\\", "/")
 
-    def _test_output(self, args, expected_output):
+    def _test_output(self, args: List[str], expected_output: str) -> None:
         out = StringIO()
         self._run_pylint(args, out=out)
         actual_output = self._clean_paths(out.getvalue())
         expected_output = self._clean_paths(expected_output)
         assert expected_output.strip() in actual_output.strip()
 
-    def _test_output_file(self, args, filename, expected_output):
+    def _test_output_file(
+        self, args: List[str], filename: LocalPath, expected_output: str
+    ) -> None:
         """
         Run Pylint with the ``output`` option set (must be included in
         the ``args`` passed to this method!) and check the file content afterwards.
@@ -184,11 +198,11 @@
         ), "Unexpected output to stdout/stderr while output option was set"
         assert expected_output.strip() in file_output.strip()
 
-    def test_pkginfo(self):
+    def test_pkginfo(self) -> None:
         """Make pylint check itself."""
         self._runtest(["pylint.__pkginfo__"], reporter=TextReporter(StringIO()), code=0)
 
-    def test_all(self):
+    def test_all(self) -> None:
         """Make pylint check itself."""
         reporters = [
             TextReporter(StringIO()),
@@ -201,21 +215,21 @@
             code=2,
         )
 
-    def test_no_ext_file(self):
+    def test_no_ext_file(self) -> None:
         self._runtest([join(HERE, "input", "noext")], code=0)
 
-    def test_w0704_ignored(self):
+    def test_w0704_ignored(self) -> None:
         self._runtest([join(HERE, "input", "ignore_except_pass_by_default.py")], code=0)
 
-    def test_exit_zero(self):
+    def test_exit_zero(self) -> None:
         self._runtest(
             ["--exit-zero", join(HERE, "regrtest_data", "syntax_error.py")], code=0
         )
 
-    def test_generate_config_option(self):
+    def test_generate_config_option(self) -> None:
         self._runtest(["--generate-rcfile"], code=0)
 
-    def test_generate_config_option_order(self):
+    def test_generate_config_option_order(self) -> None:
         out1 = StringIO()
         out2 = StringIO()
         self._runtest(["--generate-rcfile"], code=0, out=out1)
@@ -224,7 +238,7 @@
         output2 = out2.getvalue()
         assert output1 == output2
 
-    def test_generate_config_disable_symbolic_names(self):
+    def test_generate_config_disable_symbolic_names(self) -> None:
         # Test that --generate-rcfile puts symbolic names in the --disable
         # option.
 
@@ -243,25 +257,25 @@
         messages = utils._splitstrip(parser.get("MESSAGES CONTROL", "disable"))
         assert "suppressed-message" in messages
 
-    def test_generate_rcfile_no_obsolete_methods(self):
+    def test_generate_rcfile_no_obsolete_methods(self) -> None:
         out = StringIO()
         self._run_pylint(["--generate-rcfile"], out=out)
         output = out.getvalue()
         assert "profile" not in output
 
-    def test_nonexistent_config_file(self):
+    def test_nonexistent_config_file(self) -> None:
         self._runtest(["--rcfile=/tmp/this_file_does_not_exist"], code=32)
 
-    def test_help_message_option(self):
+    def test_help_message_option(self) -> None:
         self._runtest(["--help-msg", "W0101"], code=0)
 
-    def test_error_help_message_option(self):
+    def test_error_help_message_option(self) -> None:
         self._runtest(["--help-msg", "WX101"], code=0)
 
-    def test_error_missing_arguments(self):
+    def test_error_missing_arguments(self) -> None:
         self._runtest([], code=32)
 
-    def test_no_out_encoding(self):
+    def test_no_out_encoding(self) -> None:
         """test redirection of stdout with non ascii caracters"""
         # This test reproduces bug #48066 ; it happens when stdout is redirected
         # through '>' : the sys.stdout.encoding becomes then None, and if the
@@ -274,7 +288,7 @@
             code=28,
         )
 
-    def test_parallel_execution(self):
+    def test_parallel_execution(self) -> None:
         out = StringIO()
         self._runtest(
             [
@@ -290,14 +304,14 @@
             in out.getvalue().strip()
         )
 
-    def test_parallel_execution_missing_arguments(self):
+    def test_parallel_execution_missing_arguments(self) -> None:
         self._runtest(["-j 2", "not_here", "not_here_too"], code=1)
 
-    def test_abbreviations_are_not_supported(self):
+    def test_abbreviations_are_not_supported(self) -> None:
         expected = "no such option: --load-plugin"
         self._test_output([".", "--load-plugin"], expected_output=expected)
 
-    def test_enable_all_works(self):
+    def test_enable_all_works(self) -> None:
         module = join(HERE, "data", "clientmodule_test.py")
         expected = textwrap.dedent(
             f"""
@@ -311,7 +325,7 @@
             [module, "--disable=all", "--enable=all", "-rn"], expected_output=expected
         )
 
-    def test_wrong_import_position_when_others_disabled(self):
+    def test_wrong_import_position_when_others_disabled(self) -> None:
         module1 = join(HERE, "regrtest_data", "import_something.py")
         module2 = join(HERE, "regrtest_data", "wrong_import_position.py")
         expected_output = textwrap.dedent(
@@ -341,19 +355,19 @@
             actual_output = actual_output[actual_output.find("\n") :]
         assert self._clean_paths(expected_output.strip()) == actual_output.strip()
 
-    def test_import_itself_not_accounted_for_relative_imports(self):
+    def test_import_itself_not_accounted_for_relative_imports(self) -> None:
         expected = "Your code has been rated at 10.00/10"
         package = join(HERE, "regrtest_data", "dummy")
         self._test_output(
             [package, "--disable=locally-disabled", "-rn"], expected_output=expected
         )
 
-    def test_reject_empty_indent_strings(self):
+    def test_reject_empty_indent_strings(self) -> None:
         expected = "indent string can't be empty"
         module = join(HERE, "data", "clientmodule_test.py")
         self._test_output([module, "--indent-string="], expected_output=expected)
 
-    def test_json_report_when_file_has_syntax_error(self):
+    def test_json_report_when_file_has_syntax_error(self) -> None:
         out = StringIO()
         module = join(HERE, "regrtest_data", "syntax_error.py")
         self._runtest([module], code=2, reporter=JSONReporter(out))
@@ -385,7 +399,7 @@
         assert "<unknown>" in msg
         assert "line 1" in msg
 
-    def test_json_report_when_file_is_missing(self):
+    def test_json_report_when_file_is_missing(self) -> None:
         out = StringIO()
         module = join(HERE, "regrtest_data", "totally_missing.py")
         self._runtest([module], code=1, reporter=JSONReporter(out))
@@ -407,7 +421,7 @@
             assert message[key] == value
         assert message["message"].startswith("No module named")
 
-    def test_json_report_does_not_escape_quotes(self):
+    def test_json_report_does_not_escape_quotes(self) -> None:
         out = StringIO()
         module = join(HERE, "regrtest_data", "unused_variable.py")
         self._runtest([module], code=4, reporter=JSONReporter(out))
@@ -429,12 +443,12 @@
             assert key in message
             assert message[key] == value
 
-    def test_information_category_disabled_by_default(self):
+    def test_information_category_disabled_by_default(self) -> None:
         expected = "Your code has been rated at 10.00/10"
         path = join(HERE, "regrtest_data", "meta.py")
         self._test_output([path], expected_output=expected)
 
-    def test_error_mode_shows_no_score(self):
+    def test_error_mode_shows_no_score(self) -> None:
         module = join(HERE, "regrtest_data", "application_crash.py")
         expected_output = textwrap.dedent(
             f"""
@@ -444,19 +458,19 @@
         )
         self._test_output([module, "-E"], expected_output=expected_output)
 
-    def test_evaluation_score_shown_by_default(self):
+    def test_evaluation_score_shown_by_default(self) -> None:
         expected_output = "Your code has been rated at "
         module = join(HERE, "regrtest_data", "application_crash.py")
         self._test_output([module], expected_output=expected_output)
 
-    def test_confidence_levels(self):
+    def test_confidence_levels(self) -> None:
         expected = "Your code has been rated at"
         path = join(HERE, "regrtest_data", "meta.py")
         self._test_output(
             [path, "--confidence=HIGH,INFERENCE"], expected_output=expected
         )
 
-    def test_bom_marker(self):
+    def test_bom_marker(self) -> None:
         path = join(HERE, "regrtest_data", "meta.py")
         config_path = join(HERE, "regrtest_data", ".pylintrc")
         expected = "Your code has been rated at 10.00/10"
@@ -464,7 +478,7 @@
             [path, f"--rcfile={config_path}", "-rn"], expected_output=expected
         )
 
-    def test_pylintrc_plugin_duplicate_options(self):
+    def test_pylintrc_plugin_duplicate_options(self) -> None:
         dummy_plugin_path = join(HERE, "regrtest_data", "dummy_plugin")
         # Enable --load-plugins=dummy_plugin
         sys.path.append(dummy_plugin_path)
@@ -491,7 +505,7 @@
         )
         sys.path.remove(dummy_plugin_path)
 
-    def test_pylintrc_comments_in_values(self):
+    def test_pylintrc_comments_in_values(self) -> None:
         path = join(HERE, "regrtest_data", "test_pylintrc_comments.py")
         config_path = join(HERE, "regrtest_data", "comments_pylintrc")
         expected = textwrap.dedent(
@@ -506,12 +520,12 @@
             [path, f"--rcfile={config_path}", "-rn"], expected_output=expected
         )
 
-    def test_no_crash_with_formatting_regex_defaults(self):
+    def test_no_crash_with_formatting_regex_defaults(self) -> None:
         self._runtest(
             ["--ignore-patterns=a"], reporter=TextReporter(StringIO()), code=32
         )
 
-    def test_getdefaultencoding_crashes_with_lc_ctype_utf8(self):
+    def test_getdefaultencoding_crashes_with_lc_ctype_utf8(self) -> None:
         module = join(HERE, "regrtest_data", "application_crash.py")
         expected_output = textwrap.dedent(
             f"""
@@ -563,7 +577,7 @@
             )
             assert mock_stdin.call_count == 1
 
-    def test_stdin_missing_modulename(self):
+    def test_stdin_missing_modulename(self) -> None:
         self._runtest(["--from-stdin"], code=32)
 
     @pytest.mark.parametrize("write_bpy_to_disk", [False, True])
@@ -620,7 +634,7 @@
                     expected_output=expected,
                 )
 
-    def test_stdin_syntaxerror(self):
+    def test_stdin_syntaxerror(self) -> None:
         expected_output = (
             "************* Module a\n"
             "a.py:1:4: E0001: invalid syntax (<unknown>, line 1) (syntax-error)"
@@ -635,8 +649,8 @@
             )
             assert mock_stdin.call_count == 1
 
-    def test_version(self):
-        def check(lines):
+    def test_version(self) -> None:
+        def check(lines: List[str]) -> None:
             assert lines[0].startswith("pylint ")
             assert lines[1].startswith("astroid ")
             assert lines[2].startswith("Python ")
@@ -646,10 +660,10 @@
         check(out.getvalue().splitlines())
 
         result = subprocess.check_output([sys.executable, "-m", "pylint", "--version"])
-        result = result.decode("utf-8")
-        check(result.splitlines())
+        result_str = result.decode("utf-8")
+        check(result_str.splitlines())
 
-    def test_fail_under(self):
+    def test_fail_under(self) -> None:
         self._runtest(
             [
                 "--fail-under",
@@ -923,7 +937,7 @@
             assert sys.path == paths[1:]
 
     @staticmethod
-    def test_do_not_import_files_from_local_directory(tmpdir):
+    def test_do_not_import_files_from_local_directory(tmpdir: LocalPath) -> None:
         p_astroid = tmpdir / "astroid.py"
         p_astroid.write("'Docstring'\nimport completely_unknown\n")
         p_hmac = tmpdir / "hmac.py"
@@ -971,7 +985,9 @@
             )
 
     @staticmethod
-    def test_do_not_import_files_from_local_directory_with_pythonpath(tmpdir):
+    def test_do_not_import_files_from_local_directory_with_pythonpath(
+        tmpdir: LocalPath,
+    ) -> None:
         p_astroid = tmpdir / "astroid.py"
         p_astroid.write("'Docstring'\nimport completely_unknown\n")
         p_hmac = tmpdir / "hmac.py"
@@ -998,7 +1014,9 @@
                 del os.environ["PYTHONPATH"]
 
     @staticmethod
-    def test_import_plugin_from_local_directory_if_pythonpath_cwd(tmpdir):
+    def test_import_plugin_from_local_directory_if_pythonpath_cwd(
+        tmpdir: LocalPath,
+    ) -> None:
         p_plugin = tmpdir / "plugin.py"
         p_plugin.write("# Some plugin content")
 
@@ -1029,7 +1047,9 @@
             else:
                 del os.environ["PYTHONPATH"]
 
-    def test_allow_import_of_files_found_in_modules_during_parallel_check(self, tmpdir):
+    def test_allow_import_of_files_found_in_modules_during_parallel_check(
+        self, tmpdir: LocalPath
+    ) -> None:
         test_directory = tmpdir / "test_directory"
         test_directory.mkdir()
         spam_module = test_directory / "spam.py"
@@ -1061,7 +1081,7 @@
             )
 
     @staticmethod
-    def test_can_list_directories_without_dunder_init(tmpdir):
+    def test_can_list_directories_without_dunder_init(tmpdir: LocalPath) -> None:
         test_directory = tmpdir / "test_directory"
         test_directory.mkdir()
         spam_module = test_directory / "spam.py"
@@ -1079,12 +1099,12 @@
             stderr=subprocess.PIPE,
         )
 
-    def test_jobs_score(self):
+    def test_jobs_score(self) -> None:
         path = join(HERE, "regrtest_data", "unused_variable.py")
         expected = "Your code has been rated at 7.50/10"
         self._test_output([path, "--jobs=2", "-ry"], expected_output=expected)
 
-    def test_duplicate_code_raw_strings(self):
+    def test_duplicate_code_raw_strings(self) -> None:
         path = join(HERE, "regrtest_data", "duplicate_data_raw_strings")
         expected_output = "Similar lines in 2 files"
         self._test_output(
@@ -1092,7 +1112,7 @@
             expected_output=expected_output,
         )
 
-    def test_regression_parallel_mode_without_filepath(self):
+    def test_regression_parallel_mode_without_filepath(self) -> None:
         # Test that parallel mode properly passes filepath
         # https://github.com/PyCQA/pylint/issues/3564
         path = join(
@@ -1100,7 +1120,7 @@
         )
         self._test_output([path, "-j2"], expected_output="No such file or directory")
 
-    def test_output_file_valid_path(self, tmpdir):
+    def test_output_file_valid_path(self, tmpdir: LocalPath) -> None:
         path = join(HERE, "regrtest_data", "unused_variable.py")
         output_file = tmpdir / "output.txt"
         expected = "Your code has been rated at 7.50/10"
@@ -1110,7 +1130,7 @@
             expected_output=expected,
         )
 
-    def test_output_file_invalid_path_exits_with_code_32(self):
+    def test_output_file_invalid_path_exits_with_code_32(self) -> None:
         path = join(HERE, "regrtest_data", "unused_variable.py")
         output_file = "thisdirectorydoesnotexit/output.txt"
         self._runtest([path, f"--output={output_file}"], code=32)
@@ -1186,7 +1206,9 @@
             expected_output,
         )
 
-    def test_output_file_can_be_combined_with_custom_reporter(self, tmpdir):
+    def test_output_file_can_be_combined_with_custom_reporter(
+        self, tmpdir: LocalPath
+    ) -> None:
         path = join(HERE, "regrtest_data", "unused_variable.py")
         output_file = tmpdir / "output.txt"
         # It does not really have to be a truly custom reporter.
@@ -1199,7 +1221,7 @@
         )
         assert output_file.exists()
 
-    def test_output_file_specified_in_rcfile(self, tmpdir):
+    def test_output_file_specified_in_rcfile(self, tmpdir: LocalPath) -> None:
         output_file = tmpdir / "output.txt"
         rcfile = tmpdir / "pylintrc"
         rcfile_contents = textwrap.dedent(
diff --git a/tests/testutils/test_output_line.py b/tests/testutils/test_output_line.py
index 18689f4..cd8bc7e 100644
--- a/tests/testutils/test_output_line.py
+++ b/tests/testutils/test_output_line.py
@@ -3,17 +3,19 @@
 
 # pylint: disable=redefined-outer-name
 
+from typing import Callable, List, Optional
+
 import pytest
 
 from pylint.constants import PY38_PLUS
-from pylint.interfaces import HIGH, INFERENCE
+from pylint.interfaces import HIGH, INFERENCE, Confidence
 from pylint.message import Message
 from pylint.testutils.output_line import MalformedOutputLineException, OutputLine
 
 
 @pytest.fixture()
-def message():
-    def inner(confidence=HIGH):
+def message() -> Callable:
+    def inner(confidence: Confidence = HIGH) -> Message:
         return Message(
             symbol="missing-docstring",
             msg_id="C0123",
@@ -32,11 +34,11 @@
     return inner
 
 
-def test_output_line():
+def test_output_line() -> None:
     output_line = OutputLine(
         symbol="missing-docstring",
         lineno=0,
-        column=0,
+        column="0",
         object="",
         msg="Missing docstring's bad.",
         confidence=HIGH,
@@ -44,14 +46,14 @@
     assert output_line.symbol == "missing-docstring"
 
 
-def test_output_line_from_message(message):
+def test_output_line_from_message(message: Callable) -> None:
     output_line = OutputLine.from_msg(message())
     assert output_line.symbol == "missing-docstring"
     assert output_line.msg == "msg"
 
 
 @pytest.mark.parametrize("confidence", [HIGH, INFERENCE])
-def test_output_line_to_csv(confidence, message):
+def test_output_line_to_csv(confidence: Confidence, message: Callable) -> None:
     output_line = OutputLine.from_msg(message(confidence))
     csv = output_line.to_csv()
     expected_column = "column" if PY38_PLUS else ""
@@ -65,7 +67,7 @@
     )
 
 
-def test_output_line_from_csv_error():
+def test_output_line_from_csv_error() -> None:
     with pytest.raises(
         MalformedOutputLineException,
         match="msg-symbolic-name:42:27:MyClass.my_function:The message",
@@ -81,16 +83,20 @@
 @pytest.mark.parametrize(
     "confidence,expected_confidence", [[None, "HIGH"], ["INFERENCE", "INFERENCE"]]
 )
-def test_output_line_from_csv(confidence, expected_confidence):
-    proper_csv = (
-        "missing-docstring",
-        "1",
-        "2",
-        "obj",
-        "msg",
-    )
-    if confidence is not None:
-        proper_csv += (confidence,)
+def test_output_line_from_csv(
+    confidence: Optional[str], expected_confidence: Confidence
+) -> None:
+    if confidence:
+        proper_csv: List[str] = [
+            "missing-docstring",
+            "1",
+            "2",
+            "obj",
+            "msg",
+            confidence,
+        ]
+    else:
+        proper_csv = ["missing-docstring", "1", "2", "obj", "msg"]
     output_line = OutputLine.from_csv(proper_csv)
     expected_column = "2" if PY38_PLUS else ""
     assert output_line == OutputLine(
diff --git a/tests/unittest_config.py b/tests/unittest_config.py
index 8a14117..d6d62e4 100644
--- a/tests/unittest_config.py
+++ b/tests/unittest_config.py
@@ -23,18 +23,18 @@
 RE_PATTERN_TYPE = getattr(re, "Pattern", getattr(re, "_pattern_type", None))
 
 
-def test__regexp_validator_valid():
+def test__regexp_validator_valid() -> None:
     result = config.option._regexp_validator(None, None, "test_.*")
     assert isinstance(result, RE_PATTERN_TYPE)
     assert result.pattern == "test_.*"
 
 
-def test__regexp_validator_invalid():
+def test__regexp_validator_invalid() -> None:
     with pytest.raises(sre_constants.error):
         config.option._regexp_validator(None, None, "test_)")
 
 
-def test__csv_validator_no_spaces():
+def test__csv_validator_no_spaces() -> None:
     values = ["One", "Two", "Three"]
     result = config.option._csv_validator(None, None, ",".join(values))
     assert isinstance(result, list)
@@ -43,7 +43,7 @@
         assert result[i] == value
 
 
-def test__csv_validator_spaces():
+def test__csv_validator_spaces() -> None:
     values = ["One", "Two", "Three"]
     result = config.option._csv_validator(None, None, ", ".join(values))
     assert isinstance(result, list)
@@ -52,7 +52,7 @@
         assert result[i] == value
 
 
-def test__regexp_csv_validator_valid():
+def test__regexp_csv_validator_valid() -> None:
     pattern_strings = ["test_.*", "foo\\.bar", "^baz$"]
     result = config.option._regexp_csv_validator(None, None, ",".join(pattern_strings))
     for i, regex in enumerate(result):
@@ -60,7 +60,7 @@
         assert regex.pattern == pattern_strings[i]
 
 
-def test__regexp_csv_validator_invalid():
+def test__regexp_csv_validator_invalid() -> None:
     pattern_strings = ["test_.*", "foo\\.bar", "^baz)$"]
     with pytest.raises(sre_constants.error):
         config.option._regexp_csv_validator(None, None, ",".join(pattern_strings))
diff --git a/tests/unittest_reporters_json.py b/tests/unittest_reporters_json.py
index a9de3c7..c5748ef 100644
--- a/tests/unittest_reporters_json.py
+++ b/tests/unittest_reporters_json.py
@@ -16,6 +16,7 @@
 
 import json
 from io import StringIO
+from typing import Any, Dict, List
 
 from pylint import checkers
 from pylint.lint import PyLinter
@@ -38,14 +39,14 @@
 ]
 
 
-def test_simple_json_output_no_score():
+def test_simple_json_output_no_score() -> None:
     report = get_linter_result(score=False)
     assert len(report) == 1
     report_result = [sorted(report[0].items(), key=lambda item: item[0])]
     assert report_result == expected_result
 
 
-def get_linter_result(score):
+def get_linter_result(score: bool) -> List[Dict[str, Any]]:
     output = StringIO()
     reporter = JSONReporter(output)
     linter = PyLinter(reporter=reporter)
diff --git a/tests/utils/unittest_ast_walker.py b/tests/utils/unittest_ast_walker.py
index 364b35a..9d35083 100644
--- a/tests/utils/unittest_ast_walker.py
+++ b/tests/utils/unittest_ast_walker.py
@@ -2,6 +2,7 @@
 # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
 
 import warnings
+from typing import Dict, Set
 
 import astroid
 
@@ -11,15 +12,15 @@
 
 class TestASTWalker:
     class MockLinter:
-        def __init__(self, msgs):
+        def __init__(self, msgs: Dict[str, bool]) -> None:
             self._msgs = msgs
 
-        def is_message_enabled(self, msgid):
+        def is_message_enabled(self, msgid: str) -> bool:
             return self._msgs.get(msgid, True)
 
     class Checker:
-        def __init__(self):
-            self.called = set()
+        def __init__(self) -> None:
+            self.called: Set[str] = set()
 
         @check_messages("first-message")
         def visit_module(self, module):  # pylint: disable=unused-argument
@@ -37,7 +38,7 @@
         def leave_assignname(self, module):
             raise NotImplementedError
 
-    def test_check_messages(self):
+    def test_check_messages(self) -> None:
         linter = self.MockLinter(
             {"first-message": True, "second-message": False, "third-message": True}
         )
@@ -47,9 +48,9 @@
         walker.walk(astroid.parse("x = func()"))
         assert {"module", "assignname"} == checker.called
 
-    def test_deprecated_methods(self):
+    def test_deprecated_methods(self) -> None:
         class Checker:
-            def __init__(self):
+            def __init__(self) -> None:
                 self.called = False
 
             @check_messages("first-message")
diff --git a/tests/utils/unittest_utils.py b/tests/utils/unittest_utils.py
index a07a70c..77853b2 100644
--- a/tests/utils/unittest_utils.py
+++ b/tests/utils/unittest_utils.py
@@ -23,7 +23,7 @@
 from pylint.utils import utils
 
 
-def test_decoding_stream_unknown_encoding():
+def test_decoding_stream_unknown_encoding() -> None:
     """decoding_stream should fall back to *some* decoding when given an
     unknown encoding.
     """
@@ -34,7 +34,7 @@
     assert ret == ["foo\n", "bar"]
 
 
-def test_decoding_stream_known_encoding():
+def test_decoding_stream_known_encoding() -> None:
     binary_io = io.BytesIO("€".encode("cp1252"))
     stream = utils.decoding_stream(binary_io, "cp1252")
     assert stream.read() == "€"
