如何在JUnit

时间:2018-10-11 00:07:37

标签: java junit junit4

我正在使用Junit 4.12运行单元测试。我试图为我的测试类中的所有测试设置一次测试对象,所以不必为每个测试都设置一次。

但是,当我尝试从测试中访问这些变量时,出现错误。谁能向我解释让一切正常工作我需要做什么?

我不想发布专有代码,所以我试图写一个简短的例子说明我要做什么。请原谅任何错别字或逻辑错误:

import org.junit.Test;
import org.junit.BeforeClass;
import junit.framework.TestCase;

public class InventoryTest extends TestCase {
    private Inventory inv;

    @BeforeClass
    public void setupTestObjs() throws Exception {
        inv = new Inventory();

        Book b1 = new Book();
        CD c1 = new CD();
    }

    @Test
    public void testAddNew() {
        inv.addNew(b1);
        inv.addNew(b1);
    }
}

我得到的错误是Eclipse抱怨b1无法解析为变量。但是,我已经在运行任何测试之前运行的setupTestObj方法中定义了它。我该怎么做才能让我的测试看到setupTestObj方法中的变量以在其上运行测试?

2 个答案:

答案 0 :(得分:1)

b1的范围仅限于setupTestObjs()方法。因此,无法在testAddNew()中访问它。

(您没有发布编译器错误,所以我假设错误发生在testAddNew()中。)

要使这项工作,即。一次设置b1进行所有测试,则需要为其设置类范围,即。在inv之后立即声明。

您的setupTestObjs()方法和测试装置必须为static@BeforeClass才能正常工作。

答案 1 :(得分:1)

您的@BeforeClass方法必须是静态的,因此它访问的变量也必须是静态的。请尝试以下代码,b1现在应该可以在testAddNew()中访问。请注意,我已经将b1移到了班级。

import org.junit.Test;
import org.junit.BeforeClass;
import junit.framework.TestCase;

public class InventoryTest extends TestCase {
    private static Inventory inv;
    private static Book b1;

    @BeforeClass
    public static void setupTestObjs() throws Exception {
        inv = new Inventory();

        b1 = new Book();
        CD c1 = new CD();
    }

    @Test
    public void testAddNew() {
        inv.addNew(b1);
        inv.addNew(b1);
    }
}