NullPointerException com variáveis ​​estáticas

Acabei de bater muito estranho (para mim) o comportamento do java. Eu tenho as seguintes classes:

public abstract class Unit {
    public static final Unit KM = KMUnit.INSTANCE;
    public static final Unit METERS = MeterUnit.INSTANCE;
    protected Unit() {
    }
    public abstract double getValueInUnit(double value, Unit unit);
    protected abstract double getValueInMeters(double value);
}

E:

public class KMUnit extends Unit {
    public static final Unit INSTANCE = new KMUnit();

    private KMUnit() {
    }
//here are abstract methods overriden
}

public class MeterUnit extends Unit {
    public static final Unit INSTANCE = new MeterUnit();

    private MeterUnit() {
    }

///abstract methods overriden
}

E meu caso de teste:

public class TestMetricUnits extends TestCase {

    @Test
    public void testConversion() {
        System.out.println("Unit.METERS: " + Unit.METERS);
    System.out.println("Unit.KM: " + Unit.KM);
    double meters = Unit.KM.getValueInUnit(102.11, Unit.METERS);
    assertEquals(0.10211, meters, 0.00001);
    }
}
MKUnit e MeterUnit são ambos singletons inicializados estaticamente, portanto, durante o carregamento da classe. Os construtores são privados, portanto, não podem ser inicializados em nenhum outro lugar.Classe de unidade contém estáticafinal referências a MKUnit.INSTANCE e MeterUnit.INSTANCE

Eu esperaria que:

A classe KMUnit é carregada e a instância é criada.A classe MeterUnit é carregada e a instância é criada.A classe de unidade é carregada e as variáveis ​​KM e METERS são inicializadas, são finais e não podem ser alteradas.

Mas quando eu executo meu caso de teste no console com o maven, meu resultado é:

 T E S T S

Running de.audi.echargingstations.tests.TestMetricUnits<br/>
Unit.METERS: m<br/>
Unit.KM: null<br/>
Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.089 sec <<< FAILURE! - in de.audi.echargingstations.tests.TestMetricUnits<br/>
testConversion(de.audi.echargingstations.tests.TestMetricUnits)  Time elapsed: 0.011 sec  <<< ERROR!<br/>
java.lang.NullPointerException: null<br/>
        at <br/>de.audi.echargingstations.tests.TestMetricUnits.testConversion(TestMetricUnits.java:29)
<br/>

Results :

Tests in error:
  TestMetricUnits.testConversion:29 NullPointer

E a parte engraçada é que, quando eu executo este teste do eclipse via JUnit runner, tudo bem, eu não tenhoNullPointerException e no console eu tenho:

Unit.METERS: m
Unit.KM: km

Então a questão é: o que pode ser orazão que a variável KM na Unidade é nula (e ao mesmo tempo o METERS não é nulo)

questionAnswers(2)

yourAnswerToTheQuestion