У меня есть класс Singleton для тестирования:
public class Singleton {
private static Singleton instance;
private List<String> list;
private Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
instance = new Singleton();
}
}
return instance;
}
public boolean methodOne() {
if (list == null) {
list = new ArrayList<String>();
list = SomeClass.fillListOne();
}
return SomeClass.verifyList(list);
}
public boolean methodTwo() {
if (list == null) {
list = new ArrayList<String>();
list = SomeClass.fillListTwo();
}
return SomeClass.verifyList(list);
}
}
Со следующим тестовым классом:
@RunWith(JMockit.class)
public class SingletonTest {
@Test
public void testOne(final @Mocked SomeClass someClass) {
Singleton.getInstance().methodOne();
new Verifications() {
{
SomeClass.fillListOne();
}
};
}
@Test
public void testTwo(final @Mocked SomeClass someClass) {
Singleton.getInstance().methodTwo();
new Verifications() {
{
SomeClass.fillListTwo();
}
};
}
}
Если я выполняю только «testOne» или только «testTwo», тесты проходят. Если я выполняю все тесты, он проходит только первый выполненный метод. Как я могу установить для атрибута «список» значение null, например, в методе @Before? Как использовать деинкапсуляцию с синглтоном или частным членом без сеттеров?