Java 如何在before钩子中正确实例化JUnit 5中测试的类中的对象? @之前 公共作废设置(){ 机场=新机场(); } @试验 public void具有_存储(){ ArrayList机场仓库; 机场存储=新阵列列表(); 机场存储添加(“飞机”); ArrayList实际存储=airport.storage();

Java 如何在before钩子中正确实例化JUnit 5中测试的类中的对象? @之前 公共作废设置(){ 机场=新机场(); } @试验 public void具有_存储(){ ArrayList机场仓库; 机场存储=新阵列列表(); 机场存储添加(“飞机”); ArrayList实际存储=airport.storage();,java,object,testing,junit,scope,Java,Object,Testing,Junit,Scope,我正试图用AirportTest类测试我的airport类。类似于RSpec/Jasmine和我使用过的其他一些测试框架,我想确保每次测试都能得到一个新的对象实例。虽然我已经读到实例变量在JUnit中不会在测试中持久存在,所以这可能不是必需的。为什么我会这样做编译器无法解析符号airport的错误?如何正确声明和初始化airport实例,使其在每个@Test的范围内 谢谢机场变量只在设置块中已知。正如错误所说,它不知道您所说的是什么变量 要修复它,您需要在类级别上声明airport,作为成员变量

我正试图用AirportTest类测试我的airport类。类似于RSpec/Jasmine和我使用过的其他一些测试框架,我想确保每次测试都能得到一个新的对象实例。虽然我已经读到实例变量在JUnit中不会在测试中持久存在,所以这可能不是必需的。为什么我会这样做编译器无法解析符号airport的错误?如何正确声明和初始化airport实例,使其在每个@Test的范围内


谢谢

机场变量只在
设置
块中已知。正如错误所说,它不知道您所说的是什么变量

要修复它,您需要在类级别上声明
airport
,作为成员变量:

@Before
public void setUp() {
    Airport airport = new Airport();
}
@Test
public void has_storage(){
    ArrayList<String> airport_storage;
    airport_storage = new ArrayList<String>();
    airport_storage.add("plane");
    ArrayList<String> actual_storage = airport.storage();
公共类MyTest{
私有机场;//声明为私有类成员
@以前
公共作废设置(){
airport=newairport();//在每次测试之前实例化它
}
@试验
public void具有_存储(){
ArrayList机场仓库;
机场存储=新阵列列表();
机场存储添加(“飞机”);
ArrayList actual_storage=airport.storage();//使用它不会有问题
}
}

@之前是JUnit4注释 在JUnit5中有@beforeach和@beforeach


谢谢你,伙计,我想让我失望的是我对Java的作用域知识太差了!对不起,我已经将代码改为:private Airport Airport;//@Before public void setUp(){Airport=new Airport();}/@Test public void has_storage(){ArrayList Test_storage=new ArrayList());ArrayList实际存储=airport.storage();现在给我打电话的地方一个空指针异常。存储,在机场,我不明白这是为什么?我知道一个空指针异常来自于试图访问一个尚未实例化的类?@rb20你能确保
setUp
真的被调用了吗?
storage()中的逻辑
依赖于其他对象,这些对象可能为空?嗨,Lino,再次感谢您的响应,我尝试了通过打印进行一些调试,似乎在每次修复我的问题之前,我都需要仔细阅读jUnit中之前和之前的细微差别!
public class MyTest{
     private Airport airport; // declare as a private class member

     @Before
     public void setUp() {
         airport = new Airport(); // instantiate it before every test
     }

     @Test
     public void has_storage(){
         ArrayList<String> airport_storage;
         airport_storage = new ArrayList<String>();
         airport_storage.add("plane");
         ArrayList<String> actual_storage = airport.storage(); // use it without problems
     }
}