Я хочу протестировать метод randomPlayerStart
, который вызывает метод setter из класса Player. Я создал тестовый файл, который проверяет значение boolean
значения игрока.JUnit, вызывающий метод, который вызывает другой метод, возвращает nullPointerException
@Before
public void setUp() throws Exception {
playerA = new Player("Player A", false);
playerB = new Player("Player B", false);
activity = new MainActivity();
activity.randomPlayerStart();
}
@Test
public void testrandomPlayerStart() throws Exception {
assertEquals(true,playerB.isTurn());
}
Это метод randomPlayerStart
.
public void randomPlayerStart() {
Random random = new Random();
boolean player = random.nextBoolean();
if (player) {
playerA.setTurn(true);
} else {
playerB.setTurn(true);
}
}
Я попытался overriding
метод в рамках тестового файла и попытался использовать Spy из рамок Mockito, но это не сработало. Я не получаю ошибку nullException
, когда я использовал doNothing вместо doAnswer, но затем метод не вызывается.
@Before
public void setUp() throws Exception {
Turn = false;
playerA = new Player("Player A", false) {
public void setTurn(boolean turn) {
Turn = turn;
}
};
playerB = new Player("Player B", false) {
public void setTurn(boolean turn) {
Turn = turn;
}
};
activity = new MainActivity() {
public void randomPlayerStart() {
Random random = new Random();
boolean player = random.nextBoolean();
if (player) {
playerA.setTurn(true);
} else {
playerB.setTurn(true);
}
}
};
MainActivity spy = Mockito.spy(activity);
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
activity.randomPlayerStart();
return null;
}
}).when(spy).randomPlayerStart();
spy.randomPlayerStart();
}
Я не уверен, что попробовать дальше, у меня нет опыта тестирования, поэтому любые комментарии или указания очень ценятся.
'активность = новый MainActivity()' не может сделать это – njzk2
ваш комментарий решить все мои проблемы –