Appendix B. Extending the JUnit API with custom runners and matchers

 

This appendix covers

  • Introducing the Interceptor pattern
  • Implementing custom runners for JUnit
  • Implementing custom matchers for JUnit

As we already discussed in chapter 2, the backbone of JUnit consists of three classes—TestClass, Runner, and Suite—the latter one being a Runner itself. This means that once we understand how those classes operate, we can write whatever tests we need with JUnit. If you find JUnit insufficient for your testing needs, you can extend the JUnit API with custom classes. Since JUnit is open source you can rebuild or extend. There is no obvious benefit in extending the TestClass class. On the other hand, the Runner class is especially designed to be easily extensible for our needs.

This appendix gives a brief introduction to how to extend the JUnit API with custom Runner objects. It also describes how to extend the Hamcrest API with custom matchers so that we eventually customize not only our runners but also our assert calls.

B.1. Introducing the Interceptor pattern

So far in the book, we’ve gotten to know a lot of design patterns: the Controller, the Façade, Inversion of Control, and so on. Now it’s time to look at another one: the Interceptor pattern.

B.2. Implementing a custom runner

B.3. Implementing a custom matcher