@Before没有实例化我的对象然后@Test

时间:2019-07-12 17:58:03

标签: java eclipse junit compiler-errors

我实际上是在Persona上实例化对象@Before,但是在测试中,eclipse告诉了我"p cannot be resolved"

public class PersonaTest {

    // With next line here, app is working, but im trying to understand the 
    // @Before

    @Before
    public void setUp() {
        Persona p = new Persona();
        p.setDni(38890422);
        p.setEdad(24);
        p.setNombre("Nicolas");
        p.setSueldo(25000);
    }


    @Test
    public void testGestDni() {
        int resultado = p.getDni();
        int resultadoEsperado = 38890422;

        Assert.assertEquals(resultadoEsperado, resultado);
    }
}

如果我在课堂上实例化该对象,我可以使其工作。但是我想使@Before工作。

3 个答案:

答案 0 :(得分:3)

p是您的setUp方法中的局部变量。如果希望其他方法可以访问它,则应使其成为成员变量:

public class PersonaTest {
    private Persona p; // changed to a member

    @Before
    public void setUp() {
        // But p is still initialized here:
        p = new Persona();
        p.setDni(38890422);
        p.setEdad(24);
        p.setNombre("Nicolas");
        p.setSueldo(25000);
    }

    @Test
    public void testGestDni() {
        int resultado = p.getDni(); // Tests can now use p
        int resultadoEsperado = 38890422;

        Assert.assertEquals(resultadoEsperado, resultado);
    }
}

答案 1 :(得分:1)

为确保在“ setUp”中构造Persona实例变量p,请在setUp方法内放置“ p = new Persona();”。 将该实例的声明更改为简单的“ Persona p;”(那里没有“ new ...”) 这样,在调用每个测试之前,将在setup方法中创建对象。

@Persona p;的声明必须仍然在@ Before / setup方法之外。如果声明在该方法内(以及“ new”调用),则只能在setup方法内 使用。您需要它可用于测试方法。

答案 2 :(得分:0)

我认为您需要在定义“ Persona”对象的位置导入文件。否则,您的测试文件将无法知道,这就是为什么它会抛出错误,指出“ p无法解析。”

在此测试文件的顶部,尝试包含以下语句:

import <package_name>.Persona