如何用Java中的Junit测试调用构造函数?

时间:2016-07-10 18:47:33

标签: java junit

您好我正在使用Eclipse Luna,我尝试用Junit编写单元测试。我想给一个方法一个值(null),它应该抛出一个异常。 Method是一个构造函数,类有一个main。我究竟做错了什么。通常我可以像这样的Package.class.MethodName(参数参数)

调用一个方法

测试类:

public class WebUntisProviderTest {

    public static URL url = null;

    @Test(expected = IllegalArgumentException.class)
    public void WebUntisProvider() {
        final URL url = null;
        WebUntisProvider prov = new WebUntisProvider(url);

         assertNotNull("object was null" , prov.WebUntisProvider(url) );
         fail( "url must not be null.");
     }
    }

测试类:

public class WebUntisProvider {

    private URL url;

    public static void main(String[] args) throws MalformedURLException {
        URL test = new URL("HTTP://google.com");
        System.out.println(test.getProtocol());

    }
    public WebUntisProvider(URL url) {
        if (url == null)
            throw new IllegalArgumentException("url must not be null.");
        if (!url.getProtocol().equals("http") &&    !url.getProtocol().equals("https"))
            throw new IllegalArgumentException("url protocol must be http or https."); 

        this.url = url;
     }
 }

2 个答案:

答案 0 :(得分:0)

执行new时会调用构造函数,因此在此行中:

   WebUntisProvider prov = new WebUntisProvider(url);

使用new创建的对象始终为!= null

您应该删除以下行:

assertNotNull("object was null" , prov.WebUntisProvider(url) );

答案 1 :(得分:0)

这是错误的。您无法在已构造的对象上调用构造函数:

for tblName in sqlContext.tables().filter("tableName LIKE 'job%'").collect():
    sqlContext.sql("DROP TABLE IF EXISTS " + tblName)

具体来说:prov.WebUntisProvider(url)

我甚至惊讶于编译。除了实例化

之外,您不需要做任何其他事情
assertNotNull("object was null" , prov.WebUntisProvider(url) );

并对此进行断言。