2013-08-14 3 views
0

Rhino를 사용하여 Java 코드에 JavaScript를 포함합니다. JavaScript에서는 JUnit 3의 클래스 인 TestCase의 서브 클래스를 인스턴스화하지 못했지만 TestCase의 수퍼 클래스 인 Assert의 서브 클래스를 인스턴스화하는 데 성공합니다.
다음은 어떤이를 표시하는 코드입니다Rhino에서 JavaScript를 사용하여 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: [email protected] 

내가이 일을하고 왜 나 한테 물어하지 마십시오, 그냥 내가해야 가정 해 봅시다.

양해 해 주셔서 감사합니다.

+0

IMHO, 이보다 Java, JavaScript와 비슷합니다. –

답변

0

문자열 당신이보고있는 :

null(com.example.test.TestCaseClass) 

정확히 new TestCase().toString(), 익명 검사의 문자열 표현입니다; 이 코드는 작동 중입니다.

시도 :

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

이 명확를 만들기 위해.

+0

네, 맞습니다. 아주 많이 ux – Dingo