У меня есть личное поле в моем классе и метод, который модифицирует его, если установлен определенный флаг, И если карта содержит определенное значение.Я хочу проверить этот метод и увидеть результат.Вот код (нерелевантные поля и методы для краткости опущены):
Мой класс:
class UsersLoader {
private Collection<User> users;
private Map<Integer,Boolean> status;
UsersLoader() {
users = new ArrayList<>();
status = new HashMap<>();
}
protected loadExternalUsers(boolean condition) {
Collection<User> externalUsers = LoadUsersFromSomeExternalSource();
if (condition && status.get(SOME_KEY)) {
users.addAll(externalUsers);
} else {
/* do not modify my users */
}
}
}
Мой тест:
import static org.mockito.Mockito.mock;
public class UsersLoaderTest {
private UsersLoader loader;
@Before
public void setUp() {
loader = mock(UsersLoader.class);
doCallRealMethod().when(loader).loadExternalUsers(anyBoolean());
}
@Test
public void testLoadingWhenFlagIsTrue {
Collection<User> users = loader.loadExternalUsers(true);
assertThat(users.size() == 1);
}
@Test
public void testLoadingWhenFlagIsFalse {
Collection<User> users = loader.loadExternalUsers(false);
assertThat(users.size() == 0);
}
}
Когда я запускаю тест, я получаю NullPointerException
в UsersLoader
классе, в строке с предложением IF, который проверяет status.get(SOME_KEY)
.Даже если я решу это, следующий NPE будет на одну строку ниже, потому что мой users
будет нулевым.Как я могу инициализировать приватные поля в моём классе, чтобы я мог работать с ними?Я могу создать геттер и сеттер, а также высмеивать их, но тогда весь тест теряет смысл.