猿问

如何在 JUnit 中的@BeforeClass 方法中访问变量

我正在使用 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 方法中的变量来运行测试?


德玛西亚99
浏览 269回答 2
2回答

繁星点点滴滴

您的@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);    }}

梵蒂冈之花

的范围b1仅限于setupTestObjs()方法。因此无法在testAddNew().(您没有发布编译器错误,所以我假设错误发生在testAddNew().)为了使这项工作,即。b1为所有测试设置一次,您需要给它类范围,即。之后直接声明inv。你的setupTestObjs()方法和测试夹具将需要static为@BeforeClass工作按预期。
随时随地看视频慕课网APP

相关分类

Java
我要回答