为什么可以'我在Rhino上使用JavaScript实例化了TestCase的一个子类

why can't I instantiate a subclass of TestCase using JavaScript on Rhino

本文关键字:TestCase 实例化 子类 一个 JavaScript 我在 Rhino 为什么      更新时间:2023-09-26

我使用Rhino在Java代码中嵌入JavaScript。在JavaScript中,它未能实例化TestCase的一个子类,这是JUnit3中的一个类,但它确实成功地实例化了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

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

谢谢你的耐心。

您看到的字符串:

null(com.example.test.TestCaseClass)

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

尝试:

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

以使这一点更清楚。