java.lang.NoSuchMethodError: после добавления конструктора в класс - PullRequest
0 голосов
/ 29 декабря 2018

Может кто-нибудь помочь мне понять, почему после добавления нового конструктора в класс, который принимает два параметра, проект компилируется, но мой тест теперь не может создать новый экземпляр этого класса?

Я получаю это исключение:

java.lang.NoSuchMethodError: pidac.workflow.TestClass. (Lcom / pidac / инфраструктура / ядро ​​/ сервис / CrudService; Lcom / pidac / инфраструктура / ядро ​​/ сервис / AuditService;) V

в pidac.workflow.SomeTests.shouldAuditCompletedIdentityRequestItemsAgainstConnectedSources (SomeClass.java:115) в sun.reflect.NativeMethodAccessorImpl.invoke0 (родной метод) sun.reflectjhof.Imp.Imp.Imp.Imp.Imp.Imp.Imp.Imp_Imp_Imp_Imp_Imp_Imp_Imp_Imp_Imp0.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.junit.runners.model.FrameworkMethod $ 1.ralljet:.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) в org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) в org.junit.inunin.RunBefores.evaluate (RunBefores.java:26) в org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4jun.jun.jun.jun.jun.jun.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.scun.jpg ().junit.runners.ParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.оценке (ParentRunner.java2 :68) в org.junit.runners.ParentRunner.run (ParentRunner.java:363) в org.junit.runner.JUnitCore.run (JUnitCore.java:137) в com.intellij.junit4.JUnit4IdeaTestRunnerWartUnit4IdeaTestRunner.java:68) в com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47) в com.intellij.rt.execution.junit.JUnitSttar.Ujitndtarat com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:70)

Я использую IntelliJ 2018 professional.

Подробнее 29 дек.: Я удалил локальный снимок maven для этого проекта и перестроил.

Когда я отлаживаю тест, я вижу, что у класса есть этот новый конструктор.Однако очевидно, что существует несоответствие между тем, что выполняет отладчик, и тем, что я вижу в IntelliJ.

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

NoSuchMethodError возникает, когда метод, который присутствовал во время компиляции, больше не присутствует во время выполнения.

Ваши скомпилированные файлы классов устарели.Перестрой свой проект.

0 голосов
/ 04 января 2019

Мне пришлось вручную удалить папку выходных данных gradle, настроенную в данный момент в [module]/out/production/classes.

В моем проекте эта папка сконфигурирована для вывода, поэтому при просмотре там скомпилированных классов новые изменения не были отражены,Поэтому я решил, что скомпилированные классы не обновлялись, и просто удалил их.

Пересобрал проект, и мои тесты теперь могут видеть изменения, даже если я не вижу скомпилированные классы в расположении выше....

0 голосов
/ 29 декабря 2018

Ваш класс теряет конструктор по умолчанию (без аргументов), когда вы объявляете его с двумя аргументами.Тест, который вы пишете, вероятно, ожидает, что конструктор по умолчанию получит экземпляр.

Создайте еще один явный конструктор без аргументов или, если вы используете отличную библиотеку Lombok, аннотируйте класс с помощью @NoArgsConstructor, чтобы ваши тесты работали.В качестве альтернативы, измените ваш тест, чтобы инициализировать класс с 2 атрибутами в конструкторе.

Как уже упоминал Николас, пример кода от вас поможет.

Конструктор по умолчанию объясняется в другом вопросе SO здесь: Java по умолчанию конструктор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...