1

これは、JUNIT4 に含まれるサンプル JUnit テスト コードです。タイプ セーフな方法と動的な方法の 2 つのケースを示します。タイプセーフな方法を使用しようとしました。

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

/**
 * Some simple tests.
 */
public class SimpleTest extends TestCase {
    protected int fValue1;
    protected int fValue2;

    SimpleTest(String string)
    {
        super(string);
    }

    @Override
    protected void setUp() {
        fValue1 = 2;
        fValue2 = 3;
    }

    public static Test suite() {

          /*
           * the type safe way
           */
          TestSuite suite= new TestSuite();
          suite.addTest(
              new SimpleTest("add") {
                   protected void runTest() { testAdd(); }
              }
          );

          suite.addTest(
              new SimpleTest("testDivideByZero") {
                   protected void runTest() { testDivideByZero(); }
              }
          );
          return suite;
    }

    ...

    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }
}

このコード スニペットについてはよくわかりません。

suite.addTest(
    new SimpleTest("add") {
        protected void runTest() { testAdd(); }
        }
    );
  • new Simple("add") {...} はどのように機能しますか? つまり、コード ブロックが new 演算子にどのように続くのでしょうか?
  • なぜ {...} ブロックが必要なのですか? それなしで試してみましたが、コンパイル/実行時エラーは発生しませんでした。
4

2 に答える 2

2

このフラグメントでは:

suite.addTest(
    new SimpleTest("add") {
        protected void runTest() { testAdd(); }
    }
);

匿名の内部クラスを作成し、それをパラメーターとしてaddTestメソッドに渡します。Stringをパラメーターとして受け取るSimpleTestコンストラクターを呼び出したため、別のコンストラクターを追加する必要があります。Q3の質問に関しては、TestCaseにも引数のないコンストラクターがあるため、コンストラクターを追加しなくてもこのコードは正しいでしょう。

suite.addTest(
    new SimpleTest() {
        protected void runTest() { testAdd(); }
    }
);
于 2012-10-24T21:12:39.767 に答える
0

Anonymous Inner Class の作成と使用の簡単な例があります。内部クラスを使用していないように見えますが、メソッドアクションの一部を変更しているだけなので、私 Innerには少し誤解を招きます。

class Ferrari {
    public void drive() {
        System.out.println("Ferrari");
    }
}

// Example 1: You can modify the methods of an object.
class Car {
    Ferrari p = new Ferrari() {
        public void drive() {
            System.out.println("anonymous Ferrari");
        }
    };
}

class AnonymousAgain {
    public void hello(Ferrari car) {
        car.drive();
    }

    public static void main(String[] args) {
        AnonymousAgain a = new AnonymousAgain();
        // Example 2
        a.hello(new Ferrari() {
            public void drive() {
                System.out.println("The power of inner");
            }
        });
    }
}
于 2012-12-22T21:47:09.540 に答える