@Test
public void testMatchMethodOrConstructor() {

    List<MethodToLog> methodToLogs = new Gson()
            .fromJson(METHODS_TO_LOG, new TypeToken<List<MethodToLog>>() {
            }.getType());

    Set<Member> methods = new HashSet<>();
    methods.addAll(Arrays.asList(TestMatchMethod.class.getDeclaredMethods()));
    methods.addAll(Arrays.asList(TestMatchMethod.class.getDeclaredConstructors()));
    methods.addAll(Arrays.asList(TestMatchMethod.InnerClass.class.getDeclaredMethods()));
    methods.addAll(Arrays.asList(TestMatchMethod.InnerClass.class.getDeclaredConstructors()));
    methods.addAll(Arrays.asList(TestMatchMethod.StaticNestedClass.class.getDeclaredMethods()));
    methods.addAll(
            Arrays.asList(TestMatchMethod.StaticNestedClass.class.getDeclaredConstructors()));

    for (Member member : methods) {
        int matchCount = 0;

        for (MethodToLog methodToLog : methodToLogs) {
            if (methodToLog.matchMethodOrConstructor(member)) {
                matchCount++;
            }
        }

        // ensure every method match 1 time
        assertThat(matchCount, is(1));
    }

    // ensure every method is tested
    assertThat(methodToLogs.size(), is(methods.size()));
}