2012-05-17 62 views
0

我想在我創建並試圖單元測試它的特定Java類對象上的方法列表。使用Java反射的ClassnotFound異常

它無法說,它不能以找到類 「拋出java.lang.ClassNotFoundException:類com.jr.freedom.user.User」

這裏是testcode:

@Test 
    public void testRegisterNewUser() throws InvalidDataException { 
     userService = new UserService(); 
     try { 
      Class classUser = Class.forName(User.class.toString()); 
      Method m[] =classUser.getDeclaredMethods(); 
      for(int i = 0; i < m.length; i++){ 
       System.out.println(m[i].toString()); 
      } 
     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      fail(e.getMessage()); 
     } 


     assertNotNull(createTestUserJson()); 
} 

我的項目包看起來是這樣的:

裏面的項目文件夾: SRC 測試

User類是內部SRC > com> jr?freedom> user(代表com.jr.freedom.user.User) 並且測試類位於test> test> com> jr> freedom> user(表示test.com.jr.freedom.user。 UserServiceTest)

首先,內部/測試控制器中的軟件包名稱與User對象的/ src目錄中的軟件包標籤相同,但diddnt正常工作,因爲我認爲java重新連接試圖檢索/測試文件夾,所以我重命名包,以便它是唯一的,它仍然無法正常工作。有什麼建議?感謝

完全錯誤的詳細信息:

java.lang.ClassNotFoundException: class com.jr.freedom.user.User 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:169) 
    at test.com.jr.freedom.user.UserServiceTest.testRegisterNewUser(UserServiceTest.java:49) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197 

+0

我希望用戶類是公開的。請發佈用戶類。 –

回答

3

User.class的結果。 toString()是:

class com.jr.freedom.user.User 

真正的類名開始前見的類?這使得該字符串成爲非法的類名。您需要使用getName()

2

的的Class類回報toString"class com.foo.NameOfClass"所以它試圖加載:class com.jr.freedom.user.User(因爲你的錯誤消息狀態)

但更重要的是,你已經有了類:User.class,爲什麼嘗試加載再次?只要採取該行,並有:

User.class.getDeclaredMethods... 
+0

我喜歡再次強調,'Class classUser = Class.forName(User.class.toString());'這一行沒有多大意義,因爲您正在使用'User Class'來嘗試獲取'User Class'。所以你已經有了你試圖加載的'Class'對象。 –