我正在使用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方法中的变量以在其上运行测试?
答案 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);
}
}