我使用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
请不要问我为什么这样做,我只想说我必须这样做。
感谢您的耐心等待。
答案 0 :(得分:0)
你看到的字符串:
null(com.example.test.TestCaseClass)
正好是new TestCase().toString()
,是未命名测试的字符串表示;这段代码正在运作。
尝试:
class TestCaseClass extends TestCase {
public TestCaseClass() {
super("Named Test");
}
}
使这更清楚。