1

这是 JUNIT4 中包含的示例 JUnit 测试代码。它展示了两种情况:类型安全方式和动态方式。我尝试使用类型安全的方式。

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") {...} 是如何工作的?我的意思是,代码块如何跟随新的运算符?
  • 为什么需要 {...} 块?我试过没有它,我没有编译/运行时错误。
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

我有一个创建和使用匿名内部类的简单示例。对我 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 回答