Heim > Java > javaLernprogramm > Wie teste ich Methoden, die „System.exit()' in JUnit aufrufen?

Wie teste ich Methoden, die „System.exit()' in JUnit aufrufen?

Barbara Streisand
Freigeben: 2024-11-22 10:17:10
Original
711 Leute haben es durchsucht

How to Test Methods that Call `System.exit()` in JUnit?

Wie teste ich Methoden, die System.exit() aufrufen?

Problem:

Das Testen von Methoden, die System.exit() aufrufen, kann eine Herausforderung sein, da JUnit gleichzeitig mit System.exit() beendet wird aufgerufen.

Lösung:

Es gibt mehrere Ansätze, um dieses Problem anzugehen:

1. Vermeiden Sie die Verwendung von System.exit():

Anstatt System.exit() zu verwenden, sollten Sie erwägen, eine ungeprüfte Ausnahme auszulösen. Dadurch kann JUnit die Ausnahme abfangen und Testfehler melden, ohne die JVM zu beenden.

2. Verhindern Sie, dass System.exit() die JVM verlässt:

Setzen Sie einen Sicherheitsmanager ein, der Aufrufe von System.exit() verhindert. Dies kann erreicht werden, indem eine benutzerdefinierte Sicherheitsmanagerklasse erstellt und der Testfall so geändert wird, dass er damit ausgeführt wird.

3. Systemregeln verwenden (JUnit 4.9):

Verwenden Sie die ExpectedSystemExit-Regel, um zu überprüfen, ob System.exit() aufgerufen wird, und um den Exit-Status zu testen. Diese Regel bietet eine praktische Möglichkeit, System.exit() in Tests zu verarbeiten.

4. Legen Sie die Systemeigenschaft fest (Java 21):

Um zu verhindern, dass die JVM aufgrund von System.exit() beendet wird, legen Sie die Systemeigenschaft -Djava.security.manager=allow fest.

Codebeispiel mit Security Manager:

public class NoExitTestCase extends TestCase {

    protected static class ExitException extends SecurityException {
        public final int status;
        public ExitException(int status) {
            super("There is no escape!");
            this.status = status;
        }
    }

    private static class NoExitSecurityManager extends SecurityManager {
        @Override
        public void checkExit(int status) {
            super.checkExit(status);
            throw new ExitException(status);
        }
    }

    @Override
    protected void setUp() throws Exception {
        super.setUp();
        System.setSecurityManager(new NoExitSecurityManager());
    }

    @Override
    protected void tearDown() throws Exception {
        System.setSecurityManager(null);
        super.tearDown();
    }

    public void testExit() throws Exception {
        try {
            System.exit(42);
        } catch (ExitException e) {
            assertEquals("Exit status", 42, e.status);
        }
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie teste ich Methoden, die „System.exit()' in JUnit aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage