0

我使用 Rhino 将 JavaScript 嵌入到我的 Java 代码中。在 JavaScript 中,它无法实例化 TestCase 的子类,它是 JUnit 3 的一个类,但它确实成功地实例化了 Assert 的子类,它是 TestCase 的超类。
下面是一些代码来显示这一点:

package com.example.test;

import junit.framework.Assert;
import junit.framework.TestCase;
import org.mozilla.javascript.*;

public class MyFirstJavaProgram {
    public static void main(String[] args) {
        try {
            Context cx = Context.enter();
            Scriptable scope = new ImporterTopLevel(cx);
            String js = new String();
            js += "importPackage(Packages.com.example.test);";
            js += "importClass(java.lang.System);";
            js += "var testCaseClass = new TestCaseClass();";
            js += "System.out.println(\"testCaseClass: \" + testCaseClass);";
            js += "var assertClass = new AssertClass();";
            js += "System.out.println(\"assertClass: \" + assertClass);";
            cx.evaluateString(scope, js, "<cmd>", 1, null);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

class TestCaseClass extends TestCase { 
    public TestCaseClass() {} 
}
class AssertClass extends Assert { 
    public AssertClass() {} 
}

输出是:

testCaseClass: null(com.example.test.TestCaseClass)
assertClass: com.example.test.AssertClass@17943a4

请不要问我为什么要这样做,让我们说我必须这样做。

感谢您的耐心等待。

4

1 回答 1

0

您看到的字符串:

null(com.example.test.TestCaseClass)

正是new TestCase().toString(),一个未命名测试的字符串表示;此代码正在运行。

尝试:

class TestCaseClass extends TestCase { 
    public TestCaseClass() {
        super("Named Test");
    } 
}

使这一点更清楚。

于 2013-08-14T12:02:47.313 回答