为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

德玛西亚99 2021-11-11 13:43:26
我正在使用 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 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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

    }

}


查看完整回答
反对 回复 2021-11-11
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

的范围b1仅限于setupTestObjs()方法。因此无法在testAddNew().

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

为了使这项工作,即。b1为所有测试设置一次,您需要给它类范围,即。之后直接声明inv

你的setupTestObjs()方法和测试夹具将需要static@BeforeClass工作按预期。


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 268 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信