6

我是一个较新的Java开发人员。但是我对编写Junit测试用例知之甚少。我很快就要参加工作考试了。他们希望我为此编写一个程序

  1. 要从任何网站读取 HTML,请说“http://www.google.com”(您可以使用 Java 中内置 API 的任何 API,例如 URLConnection)
  2. 在控制台上从上面的 url 打印 HTML,并将其保存到本地计算机中的文件 (web-content.txt) 中。
  3. 上述程序的 JUnit 测试用例。

我已经完成了前两个步骤,如下所示:

import java.io.*;
import java.net.*;

public class JavaSourceViewer{
  public static void main (String[] args) throws IOException{
    System.out.print("Enter url of local for viewing html source code: ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String url = br.readLine();
    try {
      URL u = new URL(url);
      HttpURLConnection uc = (HttpURLConnection) u.openConnection();
      int code = uc.getResponseCode();
      String response = uc.getResponseMessage();
      System.out.println("HTTP/1.x " + code + " " + response);

      InputStream in = new BufferedInputStream(uc.getInputStream());
      Reader r = new InputStreamReader(in);
      int c;
      FileOutputStream fout=new FileOutputStream("D://web-content.txt");
      while((c = r.read()) != -1){
        System.out.print((char)c);
        fout.write(c);
      }
      fout.close();
    } catch(MalformedURLException ex) {
      System.err.println(url + " is not a valid URL.");
    } catch (IOException ie) {
      System.out.println("Input/Output Error: " + ie.getMessage());
    }
  }
}    

现在我需要第三步的帮助。

4

4 回答 4

3

您需要像这样提取一个方法

package abc.def;

import java.io.*;
import java.net.*;

public class JavaSourceViewer {
    public static void main(String[] args) throws IOException {
        System.out.print("Enter url of local for viewing html source code: ");
        BufferedReader br =
                new BufferedReader(new InputStreamReader(System.in));
        String url = br.readLine();
        try {
            FileOutputStream fout = new FileOutputStream("D://web-content.txt");
            writeURL2Stream(url, fout);
            fout.close();
        } catch (MalformedURLException ex) {
            System.err.println(url + " is not a valid URL.");
        } catch (IOException ie) {
            System.out.println("Input/Output Error: " + ie.getMessage());
        }
    }

    private static void writeURL2Stream(String url, OutputStream fout)
            throws MalformedURLException, IOException {
        URL u = new URL(url);
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();
        int code = uc.getResponseCode();
        String response = uc.getResponseMessage();
        System.out.println("HTTP/1.x " + code + " " + response);

        InputStream in = new BufferedInputStream(uc.getInputStream());
        Reader r = new InputStreamReader(in);
        int c;

        while ((c = r.read()) != -1) {
            System.out.print((char) c);
            fout.write(c);
        }
    }
}

好的,现在您可以编写 JUnit-Test 了。

  package abc.def;

  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.net.MalformedURLException;

  import org.junit.Test;

  import junit.framework.TestCase;

  public class MainTestCase extends TestCase {
    @Test
    public static void test() throws MalformedURLException, IOException{
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        JavaSourceViewer.writeURL2Stream("http://www.google.de", baos);
        assertTrue(baos.toString().contains("google"));

    }
  }
于 2012-09-21T08:48:43.617 回答
2
  • 首先将代码从 main 方法移动到 JavaSourceViewer 中的其他方法。
  • 其次,使这些方法返回您可以测试的内容。例如输出文件或阅读器的文件名。

然后为单元测试创​​建一个类

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

public class JavaSourceViewerTest {

   @Test
   public void testJavaSourceViewer() {
      String url = "...";
      JavaSourceViewer jsv = new JavaSourceViewer();
      // call you methods here to parse the site
      jsv.xxxMethod(...)
      ....
      // call you checks here like: 
      // <file name to save to output data from your code, actual filename>  - e.g.
      assertEquals(jsv.getOutputFile(), "D://web-content.txt");
      ....
   }

}

要执行 Junit,请使用 IDE(如 eclipse)或将 junit.jar 文件放在类路径和控制台中:

java org.junit.runner.JUnitCore JavaSourceViewerTest

于 2012-09-21T08:43:04.647 回答
1

你的步骤不对。这样做肯定会有所帮助,3,然后是 1,然后是 2。这样做会迫使您从功能和单元的角度进行思考。结果代码将是可测试的,无需做任何特别的事情。除了为您提供安全网之外,先测试还指导您的系统设计。

PS 千万不要在测试前尝试编写代码。如您所见,这根本不自然,也没有太大价值。

现在,要测试第一个单元,您可以将stringfromhtmlgoogle.com一些现有的string. 但是,如果 Google 更改它的页面,该测试用例将会中断。另一种方法是只检查标头中的 HTTP 代码,如果是 200,那就没问题了。只是一个想法。

对于第二个,您可以string通过读取文件来比较从网页读取的 , 与写入文件的字符串。

于 2012-09-21T08:47:54.420 回答
-1
        String str = "";
        URL oracle = new URL("http://www.google.com/");
        BufferedReader in = new BufferedReader(
        new InputStreamReader(oracle.openStream()));
        File file = new File("C:/Users/rohit/Desktop/rr1.txt");
        String inputLine;
        FileWriter fw = new FileWriter(file.getAbsoluteFile()); 
        BufferedWriter bw = new BufferedWriter(fw); 
        while ((inputLine = in.readLine()) != null) { 
        System.out.println(inputLine); 
        bw.write(inputLine); 
        } 

        bw.close(); 
        in.close(); 
于 2016-01-19T19:26:09.203 回答