## Summary of Changes in version 4.8

### Categories

From a given set of test classes, the `Categories` runner runs only the classes and methods that are annotated with either the category given with the `@IncludeCategory` annotation, or a subtype of that category. Either classes or interfaces can be used as categories. Subtyping works, so if you say `@IncludeCategory(SuperClass.class)`, a test marked `@Category({SubClass.class})` will be run.

You can also exclude categories by using the `@ExcludeCategory` annotation

Example:

    public interface FastTests { /* category marker */ }
    public interface SlowTests { /* category marker */ }

    public static class A {
        @Test
        public void a() {
            fail();
        }

        @Category(SlowTests.class)
        @Test
        public void b() {
        }
    }

    @Category({SlowTests.class, FastTests.class})
    public static class B {
        @Test
        public void c() {

        }
    }

    @RunWith(Categories.class)
    @IncludeCategory(SlowTests.class)
    @SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
    public static class SlowTestSuite {
      // Will run A.b and B.c, but not A.a
    }

    @RunWith(Categories.class)
    @IncludeCategory(SlowTests.class)
    @ExcludeCategory(FastTests.class)
    @SuiteClasses( { A.class, B.class }) // Note that Categories is a kind of Suite
    public static class SlowTestSuite {
      // Will run A.b, but not A.a or B.c
    }

### Bug fixes

- github#16: thread safety of Result counting