2012-05-17 3 views
0

Я пытаюсь использовать список методов для определенного объекта класса java, который я создал, и пытаюсь его протестировать.Исключение ClassnotFound с использованием java-отражения

В нем не говорят, что не может найти класс с "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 тест

класс пользователя находится внутри ЦСИ > com> jr? freedom> user (представляющий com.jr.freedom.user.User) , а тестовый класс находится в test> test> com> jr> freedom> user (представляющий test.com.jr.freedom.user. UserServiceTest)

Сначала имя пакета внутри/тестовый директор было таким же, как этикетка пакета в каталоге/src для объекта User, но это diddnt работает, поскольку я думал, что проблема с java пыталась извлечь объект User внутри/поэтому я переименовал пакет так, чтобы он был уникальным, и он все еще не работал. любой совет? спасибо

Полная информация об ошибках:

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 

Смотрите класс до начала реального Classname? Это делает строку незаконным именем класса.

Вам необходимо использовать getName().

2

В toString из Class класса возвращается: "class com.foo.NameOfClass" Так что пытается загрузить: class com.jr.freedom.user.User (как сообщения об ошибках состояния)

Но что еще более важно, у вас уже есть класс: User.class, зачем пытаться загрузить еще раз? Просто возьмите эту строку и получите:

User.class.getDeclaredMethods... 
+0

Мне нравится еще раз подчеркнуть, что строка 'Class classUser = Class.forName (User.class.toString());' имеет мало смысла, поскольку вы используете «Пользовательский класс», чтобы попытаться получить «Пользовательский класс». Таким образом, у вас уже есть объект класса, который вы пытаетесь загрузить. –

Смежные вопросы