【问题标题】:@Before is not instancing my object for @Test then@Before 没有为 @Test 实例化我的对象
【发布时间】:2019-07-12 17:58:03
【问题描述】:

我实际上是在我的@Before 中实例化对象Persona,但在测试中,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 工作。

【问题讨论】:

  • 局部变量是...局部的。在方法中声明的变量只能在该方法中使用。这与 JUnit 无关。因此,如果您希望 p 在这两种方法中都可以访问,它需要是一个字段,而不是局部变量。

标签: java eclipse junit compiler-errors


【解决方案1】:

psetUp 方法中的局部变量。如果你想让它被其他方法访问,你应该让它成为一个成员变量:

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);
    }
}

【讨论】:

  • 很好很好,我理解,你这样做和制作整行“Persona p = new Persona();”之间有任何区别直接在课堂上?
  • @Nezvi 是的 - 您仍然依赖 JUnit 的机制在每次测试之前运行 @Before 方法(这是使用 JUnit 的正确方法,就像您在原始帖子中尝试做的那样)
【解决方案2】:

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

“Persona p;”的声明必须仍然存在于 @Before/setup 方法之外。如果声明在该方法内(连同“新”调用),则它仅在设置方法可用。您需要它可用于测试方法。

【讨论】:

    【解决方案3】:

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

    在这个测试文件的顶部尝试包含如下语句:

    import <package_name>.Persona
    

    【讨论】:

    • 我已经导入了这个类,我没有把它粘贴到这里的代码中。 (我的坏)。
    • 那么我相信你应该在你的 setup 方法中创建 Persona p,否则内部方法将无法知道 p 是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 2019-05-12
    • 2011-03-11
    • 2020-06-02
    相关资源
    最近更新 更多