1) the javadocs for MockDriver should explain the purpose of this class given how much of the rest of the outer class uses Mockito.
The Javadocs already say that this is a simple Driver rimplementation, that returns a mock connection for any url that equals MY_JDBC_URL. I can add a note to the Javadocs why it is not a mock, but the purpose of this class is identical to the other "mock" classes in this package (there is a mock JNDI Data Source that behaves similar).
2) I don't like that you're shadowing the variable named driver ... at first glance this could confuse people skimming code who have already seen the class level driver variable ... better to use mockDriver or fixedClassDriver or something like that.
oh sorry, will fix that. The original code used driver so I kept that. FYI: The problem with Java 9 was not the class name! I analyzed Java 9's DriverManager: The problem was caused by another workflow used internally when trying to find the right driver. If you use a "Mock" Driver implementation (as Mockito class), it requires that JDBC runtime calls the methods in same order, which is not defined in the spec. Because of that you have to implement a "real" driver allowing several ways to get a connection, a mock is not enough. This "real" driver must be prepared that the runtime may call methods in different order or suddenly use different methods like "acceptURL" for the purpose of looking up the correct driver. It must also interact in a sane way with other drivers registered in the runtime. As the driver is JVM-Global, a mock is too risky.
3) rather then returning null, I suggest MockDriver.connect(...) throw a new SQLException("attempted to use this driver with bogus url") if acceptsURL(...) is false – so if the day comes when someone breaks the code, they'll have a decent error msg to identify the bug instead of an NPE.
I disagree with that, sorry. As there can be more than one driver installed in the system, DriverManager will ask all of them one after each other until one of them does not return null. The NPE is according to JDBC spec: it tells DriverManager to use next driver (RTFM). If all Drivers return null, DriverManager will finally say: "invalid URL". For historical reasons, DriverManager will not use the acceptsURL(), because older JDBC drivers may not implement that method and only return null.