6

私は新しいJava開発者です。しかし、私はJunitのテストケースを書くことについて多くの知識を持っていません。すぐに就職テストをします。彼らは私にプログラムを書いて欲しいのです

  1. 任意のWebサイトからHTMLを読み取るには、「http://www.google.com」と言います(URLConnectionなどのJavaに組み込まれているAPIの任意のAPIを使用できます)
  2. 上記のURLからコンソールにHTMLを印刷し、ローカルマシンのファイル(web-content.txt)に保存します。
  3. 上記のプログラムのJUnitテストケース。

以下のように最初の2つのステップを完了しました。

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());
    }
  }
}    

今、私は3番目のステップで助けが必要です。

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
  • まず、コードをメインメソッドから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 テストの前にコードを書き込もうとしないでください。あなたが見ることができるように、それは単に自然ではなく、それは多くの価値を与えません。

ここで、最初のユニットをテストするためstringに、htmlからgoogle.com、をいくつかの既存のと比較することができますstring。しかし、Googleがページを変更すると、そのテストケースは機能しなくなります。もう1つの方法は、ヘッダーからHTTPコードをチェックすることです。200の場合は問題ありません。ただのアイデア。

string2つ目は、ファイルを読み取ることで、Webページから読み取った文字列とファイルに書き込んだ文字列を比較できます。

于 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 に答える