Inhaltsverzeichnis
Frageninhalt
Workaround
Heim Java Warum bestehen meine Java-Servertests, wenn ich vor dem Test eine System.out.println(in.readLine())-Anweisung hinzufüge, aber ohne diese fehlschlagen?

Warum bestehen meine Java-Servertests, wenn ich vor dem Test eine System.out.println(in.readLine())-Anweisung hinzufüge, aber ohne diese fehlschlagen?

Feb 22, 2024 pm 01:34 PM

Antwort des

php-Editors Yuzai: Das Hinzufügen der System.out.println(in.readLine())-Anweisung im Java-Servertest kann sich auf die Testergebnisse auswirken, da diese Anweisung den Eingabestream des Servers liest, damit der Server die Anfrage empfangen kann. Ohne diese Anweisung empfängt der Server die Anfrage möglicherweise nicht korrekt, was dazu führt, dass der Test fehlschlägt. Daher dient das Hinzufügen dieser Anweisung vor dem Test dazu, sicherzustellen, dass der Server die Anforderung normal empfangen und den Test bestehen kann.

Frageninhalt

Ich versuche, einen Server in Java zu implementieren, um das Mehrspieler-Minesweeper-Spiel zu verwalten. Beim Versuch, meinen Server zu testen, um sicherzustellen, dass er korrekt auf legitime Client-Anfragen reagiert, habe ich festgestellt, dass nur das Hinzufügen einer system.out.println(in.readline())-Anweisung nach dem Drucken einer bestimmten Client-Anfrage an den Server die Testausgabe bestehen würde stream , aber bevor der Test selbst aufgerufen wird.

Eine Anfrage, die ein Kunde beispielsweise stellen kann, ist eine „Ansicht“-Anfrage, um den aktuellen Status des Boards anzuzeigen. Ich habe ursprünglich einen Test für „look“ so geschrieben:

@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());
Nach dem Login kopieren

Wenn ich den Test jedoch auf diese Weise ausführe, schlägt er fehl und ich erhalte eine Fehlermeldung, die besagt, dass [- - - - - - -] erwartet, aber [] erhalten wurde.

Aber wenn ich eine Print-Anweisung wie diese hinzufüge:

@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());
Nach dem Login kopieren

Test bestanden. Warum gibt es eine solche Situation? Gibt die print-Anweisung dem Client nur mehr Zeit, Eingaben vom Server zu lesen, oder ist möglicherweise noch etwas anderes im Gange? Gerne stelle ich Ihnen weitere Ausschnitte meines Codes zur Verfügung, wenn es Ihnen hilft.

Workaround

Blindes Raten: Ihre Serverantwort beginnt mit einer unerwarteten Leerzeile.

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

Sie können dies auf dem Server beheben, indem Sie alles entfernen, was leere Zeilen sendet, oder Ihren Test ändern, um das Problem zu beheben:

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());
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum bestehen meine Java-Servertests, wenn ich vor dem Test eine System.out.println(in.readLine())-Anweisung hinzufüge, aber ohne diese fehlschlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)