为什么我不能在Rhino上使用JavaScript实例化Test Case的子类

时间:2013-08-14 08:17:58

标签: java javascript junit rhino

我使用Rhino在我的Java代码中嵌入JavaScript。在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

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

感谢您的耐心等待。

1 个答案:

答案 0 :(得分:0)

你看到的字符串:

null(com.example.test.TestCaseClass)

正好是new TestCase().toString(),是未命名测试的字符串表示;这段代码正在运作。

尝试:

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

使这更清楚。