java 主メソッドのJUnit的サンプル.System.Exitのコードの确认。标准出力(的System.out,System.err的)の取得。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 主メソッドのJUnit的サンプル.System.Exitのコードの确认。标准出力(的System.out,System.err的)の取得。相关的知识,希望对你有一定的参考价值。

/**
* JUnit用SecuriyManager
* System.Exitが呼ばれた際に、ExitExceptionにステータスを設定し、スローする。
*/
public Class TestSecurityManager extends SecuriyManager {
  public TestSecurityManager() {}
  
  @override
  public void checkPermission(Permission permission) {
    
  }

  @override
  public void checkExit(int status) {
    throw new ExitException(status);
  }
}
/**
* System.Exitが呼ばれた際にスローする例外
*/
public class ExitException extends SecurityException {
  private int status = 0;
  public int getStatus() {
    return status;
  }
  private ExitException(){}
  public ExitException(int status) {
    this.status = status;
  }
}
/**
 * mainメソッド実装クラスをテストする基底クラス。
 */ 
public abstract class AbstractMainTester {
  private static final String ARGS_DELIMITER = " ";
  protected static final String LINE_SEPARATOR = System.getProperty("line.separator");
  private static final PrintStream stdOut = System.out;
  private static final PrintStream stdErr = System.err;
  private static final SecurityManager securityManager = System.getSecurityManager();
  
  /**
   * 正常終了確認
   * 
   * @return 標準出力
   */
  protected String invorkeMainNomal(Class<?> cl, String arg, int exitCode) {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    System.setOut(new PrintStream(out));
    
    invorkeMain(cl, arg, exitCode);
    
    System.setOut(stdOut);
    return out.toString();
  }

  /**
   * 異常終了確認
   * 
   * @return 標準エラー出力
   */
  protected String invorkeMainError(Class<?> cl, String arg, int exitCode) {
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    System.setErr(new PrintStream(out));
    
    invorkeMain(cl, arg, exitCode);
    
    System.setErr(stdOut);
    return out.toString();
  }
  
  /**
   * mainメソッド実行
   */ 
  private void invorkeMain(Class<?> cl, String arg, int exitCode) {
    System.setSecurityManager(new TestSecurityManager());
    try {
      Method m = cl.getMethod("main", String[].class);
      m.invorke(null, new Object[] { arg.split(ARGS_DELIMITER) });
    } catch (InvocationTargetException ite) {
      assertThat(((ExitException)ite.getTargetException()).getStatus(), is(exitCode));
    } catch (Exception e) {
      throw RuntimeException(e);
    }
  System.setSecurityManager(securityManager);
  }
}

以上是关于java 主メソッドのJUnit的サンプル.System.Exitのコードの确认。标准出力(的System.out,System.err的)の取得。的主要内容,如果未能解决你的问题,请参考以下文章

ruby define_methodメソッドでコードをシンプルに书く

html 不メソッドの使い方

typescript moment.jsのDIFFメソッドの挙动

csharp C#5.0 async / awaitでの主要メソッドの书き方

ruby 超级でスーパークラスのメソッドの返り値とかを操作

c_cpp PIRセンサが反応したらLEDが光るArduino的サンプル