java - 编写多个测试函数会对除第一个之外的每种情况给出 NullPointerException

标签 java eclipse testing junit4

我正在尝试测试 VideoStore 类的函数,其中包含名为 store 的视频类型数组。当我将测试类作为 junit 测试运行时,只有 4 个测试中的第一个通过,其他测试抛出 NullPointer 异常。当我单独运行它们时,每个测试都通过了。我已经上过测试课了。

我已经尝试过使用 @BeforeClass 而不是 @Before Annotation。 我也尝试过在 east @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.测试添加视频传递 2. testDoCheckout java.lang.NullPointerException 3. testDoReturn java.lang.NullPointerException 4. testreceiveRating java.lang.NullPointerException

每一项都单独通过

最佳答案

您的 count 变量是静态的,因此每次测试它都会增加,并且新视频将添加到每个测试数组中的不同位置

使其非静态

private int count = 0;

关于java - 编写多个测试函数会对除第一个之外的每种情况给出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56576626/

相关文章:

java - 如何使用 net.sf.json 库验证给定字符串是否有效 JsonArray

java - 如何在Eclipse中制作war文件

java - 如何使用 hamcrest 比较忽略标签的文本?

ruby-on-rails-3 - Rack::Test 使用 JSON 的 PUT 方法无法将 JSON 转换为参数

java - 无法使用对象访问父类(super class)中的字段

java - 从 Java 和 Process 的 "destroy"方法运行 exe

java - Eclipse 无法安装ADT

java - Eclipse Java 调试器 : easier way see values in the debugger that are in nested collections?

ruby-on-rails-3 - 如何使用 Capybara 获取、显示、发布、放入 Controller 测试?

java - 用单个特殊字符替换多次出现的特殊字符