繁体   English   中英

为什么使用JUnit调用fail()在Java类中进行编译

[英]Why does a call to fail() compile in a Java Class using JUnit

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

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

public class Test {

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

    }
}

问候,

圭多

import static行将Assert类的所有静态成员import static到编译单元的静态名称空间中。 fail()调用引用Assert.fail()

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

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

public class Test {

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

更具可读性。

但是,正如JB Nizet指出的那样 ,对JUnit的断言使用import static是很常见的做法。 当你编写和阅读足够多的JUnit测试时,知道断言方法的来源将成为第二天性。

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

import static org.junit.Assert.*;

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

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

@Test

因此会产生错误:

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

此错误即将发生,因为您的类名和注释名称相同(测试)。将您的类名更改为“Test1”或Test以外的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM