4

这似乎不应该编译和运行,因为Object没有fail()方法。在编译时发生了一些奇怪的事情吗?(我正在使用 NetBeans):

import static org.junit.Assert.*;
import org.junit.Test;

public class Test {

    @Test
    public void hello() {
        fail();

    }
}

问候,

圭多

4

3 回答 3

18

您的import static行将类的所有静态成员Assert导入编译单元的静态命名空间。fail()调用指的是Assert.fail()

您所遇到的关于 where 定义的困惑fail()正是我通常不建议使用import static. 在我自己的代码中,我通常导入类并使用它来调用静态方法:

import org.junit.Assert;
import org.junit.Test;

public class Test {

    @Test
    public void hello() {
        Assert.fail();
    }
}

更具可读性。

然而,正如JB Nizet 指出的那样import static,使用JUnit 的断言是相当普遍的做法。当您编写和阅读足够多的 JUnit 测试时,知道断言方法的来源将成为第二天性。

于 2013-03-02T17:55:21.867 回答
6

这是完全正确的,它将运行和编译——我已经使用 eclipse 进行了检查。原因是静态导入:

import static org.junit.Assert.*;

从 org.junit.Assert 类中添加所有静态字段或方法 - 因此包括fail()方法。

然而,可能出现的问题是您的测试类的名称与注释的名称相同

@Test

因此它会产生一个错误:

导入 org.junit.Test 与同一文件中定义的类型冲突

于 2013-03-02T17:57:55.120 回答
0

出现此错误是因为您的类名和注释名称相同(Test)。将您的类名更改为“Test1”或Test以外的其他名称。

于 2014-07-18T09:17:20.450 回答