Я не понимаю, почему этот тестовый пример выполняется только в том случае, если я прокомментирую последнюю строку в методе, который находится под тестированием. Я объявила новый объект GameThread, поскольку я думал, что это решит проблему, но это не так. Должен ли я использовать настройку и срыв при тестировании метода, который использует другой экземпляр объекта в тестируемом методе?Испытание Junit при тестировании метода, использующего отдельный класс
public void chainReactionCalculation(Ball previous, Ball current) {
// To measure a chain reaction we find out the previous chain number
// of the ball that we collided into. We increment our own number as
// we are the next layer in the chain and we use the previous balls
// chain number to calculate the result and give ourselves a hit score.
// The temporary score is updated in the game thread which can then
// be used for display and to add to the total static store if level was passed.
current.setChainNumber(previous.getChainNumber() + 1);
int result = 0;
if (previous.getChainNumber() == 0) {
result = 100;
current.setExplodingBallHitScore(100);
} else
result = 300 * (int) (Math.pow(previous.getChainNumber(), 3));
current.setExplodingBallHitScore(result);
// this line gets commented out to run the test case
gameThread.setTempScore(gameThread.getTempScore() + result);
}
@Test
public void scoringTest(){
// These tests test the updating of the chain reaction number
// and the hit score that ball should have
// NOTE VERY IMPORTANT, Line 179 must be commented out in the ball class
// in order for this to work.
// A chain reaction of three balls colliding here
ball.chainReactionCalculation(ball, collideBall);
ball.chainReactionCalculation(collideBall, nonCollideBall);
assertEquals(ball.getChainNumber(), 0);
assertEquals(0, ball.getExplodingBallHitScore());
assertEquals(collideBall.getChainNumber(), 1);
assertEquals(100, collideBall.getExplodingBallHitScore());
assertEquals(nonCollideBall.getChainNumber(), 2);
assertEquals(300, nonCollideBall.getExplodingBallHitScore());
}
@ джон B В конструкторе gameThread У меня есть объект шар, который создается с gameThread как прошел аргумент. Это ref, который затем используется внутри тестируемого метода. Исключение нулевого указателя выбрасывается на эту строку, если он не закомментирован
Не могу сказать, поскольку мы не видим определения 'gameThread' или того, как оно предоставляется тестируемому классу. Большой вопрос здесь в том, как он не работает, когда строка не закомментирована? –
@ john B В конструкторе gameThread у меня есть объект шара, который создается с помощью gameThread в качестве переданного аргумента. Это ref, который затем используется внутри тестируемого метода. Исключение нулевого указателя выбрасывается на эту строку, если оно не закомментировано. – Nanotron
Это объяснение подразумевает, что что-то (возможно, 'gameThread', так как мы не видим, где это инициализируется) неправильно инициализируется, когда вы работаете под тестом. –