发布单元测试与URI的连接

时间:2011-06-03 18:23:41

标签: java http junit

我正在测试我的Java / Jersey Web服务并运行一个有趣的测试用例。我正在检查不同URI条目的状态代码,以确保不正确的URI不会破坏我的代码或任何东西。在我抛出无效字符(例如!@ $#&lt;&gt;等)的测试用例中,我的浏览器会像我期望的那样引发404错误,但JUnit将错误显示为500错误。这种情况发生在我扔“&lt; 134-&gt;”之类的事情中以及我尝试注入html代码的情况(例如“myURI<html><p>hello</p><br></html>/restofmyURI”)。

为什么我会为同一个电话获得不同的服务器响应,和/或如何合并响应的任何想法?

2 个答案:

答案 0 :(得分:1)

只想在这里为我的流程绑定松散的目标。我最终不需要对我的测试进行编码,因为URL将直接调用,而不是通过浏览器调用,但在我意识到这一点之前,我已经有了编码方法。根据Kaj的建议(参见我原来问题的评论),我将字符串分成几部分,分成我需要留下未编码的任何字符(即:/。它比我认为的要复杂一点,但它达到了它的目的。

- 编辑:相关代码 -
这是我的测试方法,我打电话打开与服务器的连接(使用基本身份验证):

private void getConnection(String target, String user, String pass) throws Exception  
{  
  URL url = new URL(target);  
  URLConnection conn = url.openConnection();  
  //Here's where basic auth kicks in  
  String creds = user + ":" + pass;  
  String encoded = new sun.misc.BASE64Encoder().encode(creds.getBytes());  
  conn.setRequestProperty("Authorization", "Basic " + encoded);  
  //This part doesn't rely on authentication  
  conn.connect();  
}  

编码(如果需要)将在传递给此方法之前完成。

答案 1 :(得分:0)

而不是直接编码String。编码url对象。这应该有助于防止MalformedURLException

 try{
     URL url = new URL("http://myurl/otherparameters/here");    
     String encodedurl = URLEncoder.encode(url.toString(),"UTF-8");     
  }
  catch(MalformedURLException mue)
  {
     System.err.println(mue); 
  }
  catch(UnsupportedEncodingException uee)
  {
     System.err.println(uee);
  }