10

特定の入力に対してSystem.exit()(の代わりに例外を使用したくない)を呼び出すコマンドライン ツールを開発しています。

私はJava に精通しています: System.exit() を呼び出すメソッドをテストするには? そしてその最もエレガントなアプローチです。

残念ながら、依存関係をsystem-rulesjunit-interfaceに追加する必要があったため、純粋ではありません。

specs2を使用しない現在のアプローチよりも純粋なspecs2System.exitで処理するための一般的なパターンはありますか?

import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.ExpectedSystemExit;

public class ConverterTest {
    @Rule
    public final ExpectedSystemExit exit = ExpectedSystemExit.none();

    @Test
    public void emptyArgs() {
        exit.expectSystemExit();
        Converter.main(new String[]{});
    }

    @Test
    public void missingOutArgument() {
        exit.expectSystemExitWithStatus(1);
        Converter.main(new String[]{"--in", "src/test/resources/078.xml.gz"});
    }
}
4

2 に答える 2

1

最初のオプション: の代わりに何らかの例外を使用しますSystem.exit

2 番目のオプション: 別のスレッドでアプリケーションを呼び出し、リターン コードを確認します。

3 番目のオプション: モックSystem.exit。それを行うには多くの可能性がありますが、言及されたものは非常に優れています。

ただし、 でspecs2動作する固有のパターンはありませんSystem.exit。個人的には、1番目または2番目のオプションをお勧めします。

于 2016-08-22T08:23:26.760 に答える