Может ли кто-нибудь помочь мне понять, почему после добавления нового конструктора в класс, который принимает два параметра, проект компилируется, но теперь мой тест не может создать новый экземпляр этого класса?
Я получаю это исключение:
java.lang.NoSuchMethodError: pidac.workflow.TestClass.(Lcom/pidac/infrastructure/core/service/CrudService;Lcom/pidac/infrastructure/core/service/AuditService;)V
at pidac.workflow.SomeTests.shouldAuditCompletedIdentityRequestItemsAgainstConnectedSources(SomeClass.java:115) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Я использую IntelliJ 2018 professional.
Подробнее 29 декабря: Я удалил локальный снимок maven для этого проекта и перестроил.
Когда я отлаживаю тест, я вижу, что у класса есть этот новый конструктор. Однако очевидно несоответствие между тем, что выполняет отладчик, и тем, что я вижу в IntelliJ.
Я не могу поделиться кодом. Однако проблема, как объяснено, в точном представлении проблемы. Мне нужно выяснить, откуда IntelliJ запускает свои тесты.




Ваш класс теряет свой конструктор по умолчанию (без аргументов), когда вы объявляете конструктор с двумя аргументами. Тест, который вы пишете, вероятно, ожидает, что конструктор по умолчанию получит экземпляр.
Создайте еще один явный конструктор без аргументов или, если вы используете отличную библиотеку Lombok, аннотируйте класс с помощью @NoArgsConstructor, чтобы ваши тесты работали. В качестве альтернативы измените свой тест, чтобы инициализировать класс с двумя атрибутами в конструкторе.
Как упомянул Николас, вам поможет пример кода.
Конструктор по умолчанию объясняется в другом вопросе SO здесь: Конструктор по умолчанию Java
Конструктор по умолчанию не был удален.
NoSuchMethodError возникает, когда метод, который присутствовал во время компиляции, больше не присутствует во время выполнения.
Ваши скомпилированные файлы классов устарели. Восстановите свой проект.
Я выполнил чистую сборку-установку для всего решения. Кроме того, мои тесты находятся в том же проекте (модуле), что и исходный код. Мы используем соглашение Maven, которое, судя по моему опыту, не требует перестройки проекта.
Мне пришлось вручную удалить папку вывода gradle, которая в настоящее время настроена в [module]/out/production/classes.
В моем проекте эта папка настроена для вывода, поэтому, когда я посмотрел на скомпилированные классы, новые изменения не были отражены. Поэтому я решил, что эти скомпилированные классы не обновляются, и просто удалил их.
Пересобранный проект, и мои тесты теперь могут видеть изменения, хотя я не вижу скомпилированные классы в расположении выше ....
Не могли бы вы поделиться своим кодом?