GroovyTestCaseが勝手に動く理由

なんで,GroovyTestCaseの子供だけが,

> groovy HogeTest.groovy

で実行できんのかが不思議だったんで,調べてみたよ。


なんのことはない。GroovyShellの中で,GroovyTestCaseの子だけ特別扱いしてるだけだった。
実につまらん仕組みだのう。:-(

=== GroovyShell.java より抜粋 ===
private Object runMainOrTestOrRunnable(Class scriptClass, String[] args) {
  :
  try {
    // let's find a main method
    scriptClass.getMethod("main", new Class[]{String[].class});
    // if that main method exist, invoke it
    return InvokerHelper.invokeMethod(scriptClass, "main", new Object[]{args});
  } catch (NoSuchMethodException e) {
    // if it implements Runnable, try to instantiate it
    if (Runnable.class.isAssignableFrom(scriptClass)) {
      return runRunnable(scriptClass, args);
    }
    // if it's a unit test extending GroovyTestCase, run it with JUnit's TextRunner
    if (isUnitTestCase(scriptClass)) {
      return runTest(scriptClass);   // <- これが,その仕組み
    }
    :