Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah Java Mengapakah ujian pelayan Java saya lulus apabila saya menambah pernyataan System.out.println(in.readLine()) sebelum ujian, tetapi gagal tanpanya?

Mengapakah ujian pelayan Java saya lulus apabila saya menambah pernyataan System.out.println(in.readLine()) sebelum ujian, tetapi gagal tanpanya?

Feb 22, 2024 pm 01:34 PM

Jawapan editor php Yuzai: Menambah pernyataan System.out.println(in.readLine()) dalam ujian pelayan Java boleh menjejaskan keputusan ujian, kerana pernyataan ini akan membaca aliran input pelayan supaya pelayan boleh menerima permintaan. Tanpa kenyataan ini, pelayan mungkin tidak menerima permintaan dengan betul, menyebabkan ujian gagal. Oleh itu, menambah kenyataan ini sebelum ujian adalah untuk memastikan pelayan boleh menerima permintaan secara normal dan lulus ujian.

Kandungan soalan

Saya cuba melaksanakan pelayan di java untuk mengendalikan permainan penyapu ranjau berbilang pemain. Semasa cuba menguji pelayan saya untuk memastikan ia bertindak balas dengan betul kepada permintaan pelanggan yang sah, saya mendapati bahawa hanya menambah pernyataan system.out.println(in.readline()) selepas mencetak permintaan klien tertentu kepada pelayan akan lulus output ujian stream , tetapi sebelum memanggil ujian itu sendiri.

Sebagai contoh, satu permintaan yang boleh dibuat oleh pelanggan ialah permintaan "view" untuk melihat status terkini lembaga tersebut. Saya pada asalnya menulis ujian untuk "rupa" seperti ini:

@test(timeout = 10000)
    public void publishedtest() throws ioexception {

        thread thread = startminesweeperserver("board5");

        socket socket = connecttominesweeperserver(thread);
        
        bufferedreader in = new bufferedreader(new inputstreamreader(socket.getinputstream()));
        printwriter out = new printwriter(socket.getoutputstream(), true);

        out.println("look");
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
        assertequals("- - - - - - -", in.readline());
Salin selepas log masuk

Namun, apabila saya menjalankan ujian seperti ini, ia gagal dan saya mendapat mesej ralat yang menyatakan bahawa ia menjangkakan [- - - - - - -] tetapi mendapat [].

Tetapi apabila saya menambah kenyataan cetakan seperti ini:

@Test(timeout = 10000)
    public void publishedTest() throws IOException {

        Thread thread = startMinesweeperServer("board5");

        Socket socket = connectToMinesweeperServer(thread);

        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        out.println("look");
        System.out.println(in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
        assertEquals("- - - - - - -", in.readLine());
Salin selepas log masuk

Ujian lulus. Kenapa ada keadaan sedemikian? Adakah penyata cetakan hanya memberi pelanggan lebih masa untuk membaca input daripada pelayan, atau adakah mungkin ada perkara lain yang berlaku? Senang dapat memberikan lebih banyak coretan kod saya jika ia membantu.

Penyelesaian

Teka Buta: Respons pelayan anda bermula dengan baris kosong yang tidak dijangka.

system.out.println(in.readline());<code>println 部分实际上并不重要,只需使用 in.readline() 就会得到相同的结果,因为它“消耗”了来自服务器的第一行。这不是时间问题,因为 readline() akan menyekat sehingga keseluruhan baris diterima.

Anda boleh membetulkannya pada pelayan dengan mengalih keluar apa sahaja yang menghantar baris kosong atau mengubah suai ujian anda untuk menyelesaikan masalah:

out.println("look");
    assertEquals("", in.readLine()); // Add this line.
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
    assertEquals("- - - - - - -", in.readLine());
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapakah ujian pelayan Java saya lulus apabila saya menambah pernyataan System.out.println(in.readLine()) sebelum ujian, tetapi gagal tanpanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)