У меня есть класс синглтон, как показано ниже:Singleton Тест с JUnit
public enum SingletonClassA {
INSTANCE;
private final Map<Character, Character> characters;
// private constructor
SingletonClassA() {
Map<Character, Character> aCharMap = new HashMap();
aCharMap.put('a', 'e');
aCharMap.put('o', 'u');
// in order to keep short I erased other puts.
characters = aCharMap;
}
public char getInstance(final char letter) {
return characters.get(letter);
}
public boolean containsKey(char letter) {
return characters.containsKey(letter);
}
}
И для того, чтобы проверить, что я создать только один единственный объект, даже если я называю несколько раз, я создал тестовый случай с JUnit:
public class SingletonTest {
@Test
public void TestSingletonObject(){
SingletonClassA instance1 = SingletonClassA.INSTANCE;
SingletonClassA instance2 = SingletonClassA.INSTANCE;
//Passes
Assert.assertSame("2 objects are same", instance1, instance2);
}
@Test
public void TestgetInstance(){
SingletonClassA instance1 = SingletonClassA.INSTANCE;
SingletonClassA instance2 = SingletonClassA.INSTANCE;
// Does not pass
Assert.assertSame(instance1.getInstance('o'), instance2.getInstance('o'));
}
}
испытание проходит от TestSingletonObject(), который говорит, что эти 2 объекта точно так же. Но из второго, TestgetInstance(), он не проходит.
Мой вопрос: почему? Почему это не проходит от второго теста. Я думаю, что даже я называю методы экземпляра, он должен возвращать true, потому что они принадлежат одному и тому же объекту. Я пропустил пункт?