Написание нескольких тестовых функций дает NullPointerException для каждого случая, кроме первого - PullRequest
2 голосов
/ 13 июня 2019

Я пытаюсь протестировать функции класса VideoStore, который содержит массив типа Video с именем store. Когда я запускаю тестовый класс как тест junit, только первый из 4 тестов проходит, другой выдает исключение NullPointer. Каждый тест проходит, когда я запускаю их индивидуально. Я дал свой тестовый класс.

Я уже пытался использовать @BeforeClass вместо @Before Annotation. Я также пробовал создавать экземпляры в восточной функции @Test отдельно.

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import tm2.VideoStore;

public class VideoTest {
VideoStore vs;

@Before
public void before() {
    vs = new VideoStore();
    vs.addVideo("LifeOfGuy");
}

@Test
public void testAddVideo() {
    assertEquals("LifeOfGuy",vs.store[0].videoName);
}

@Test
public void testDoCheckout() {
    vs.doCheckout(vs.store[0].videoName);
    assertTrue(vs.store[0].checkout);
}

@Test
public void testDoReturn() {
    vs.doReturn("LifeOfGuy");
    assertFalse(vs.store[0].checkout);
}

@Test
public void receiveRating() {
    vs.receiveRating("LifeOfGuy", 5);
    assertEquals(5,vs.store[0].rating);
}
}

Класс VideoStore:

public class VideoStore {

public Video[] store = new Video[10];
static int count = 0;

public void addVideo(String name) {
    store[count++] = new Video(name);
}

public void doCheckout(String name) {
    for(int i=0; i<count; i++) {
        if((store[i].videoName).equals(name)) {
            store[i].doCheckout();
            break;
        }
    }
}

public void doReturn(String name) {
    for(int i=0; i<count; i++) {
        if((store[i].videoName).equals(name)) {
            store[i].doReturn();
            break;
        }
    }
}

public void receiveRating(String name, int rating) {
    for(int i=0; i<count; i++) {
        if((store[i].getName()).equals(name)) {
            store[i].receiveRating(rating);
        }
    }
}

void listInventory() {
    System.out.println("----------------------------------------");
    System.out.println("Video Name | Checkout Status | Rating ");
    for(int i=0; i<count; i++) {
        System.out.println(store[i].videoName+"  |  "+store[i].getCheckout()+"  |  "+store[i].getRating());;
    }
    System.out.println("----------------------------------------");
}
}

Junit Результат: ---- Работает с ошибками 4/4 3 сбоев 0 1. testAddVideo pass 2. testDoCheckout java.lang.NullPointerException 3. testDoReturn java.lang.NullPointerException 4. testreceiveRating java.lang.NullPointerException

Каждый проходит индивидуально

1 Ответ

2 голосов
/ 13 июня 2019

Ваша переменная count является статической, поэтому она будет увеличиваться при каждом тесте, а новое видео будет добавляться в другое место в массиве для каждого теста

Сделать его нестатичным

private int count = 0;
...