Nano Hash - криптовалюты, майнинг, программирование

Android JUnit не компилируется, если объекты можно разделить

У меня очень простой класс, и я написал очень простой тест Junit, который прошел успешно.

Теперь я добавляю в свой класс реализацию Parcelable. Мой код хорошо компилируется, и приложение работает хорошо, но мой тест Junit больше не компилируется из-за NoClassDefFoundError: android/os/Parcelable

Я не пытаюсь тестировать разделяемые свойства, мне просто нужно, чтобы мой тест скомпилировался.

Я предполагаю, что проблема с конфигурацией, но я не могу найти, что изменить, чтобы исправить это.

Я работаю на Android Studio 2.3. Я уже пытался перезапустить андроид-студию/перестроить/очистить...

Помощь будет оценена.

java.lang.NoClassDefFoundError: android/os/Parcelable

    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.example.me.myapp.PropositionUnitTest.isDeltaCPositiveOrNullIsCorrect1(PropositionUnitTest.java:53)
    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.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.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
    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 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.lang.ClassNotFoundException: android.os.Parcelable
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 42 more
15.03.2017

  • Я столкнулся с той же проблемой несколько дней назад. Раньше это не было проблемой, поэтому я предположил, что это может быть какая-то ошибка, появившаяся недавно. 16.03.2017
  • Хорошо, после нескольких часов борьбы я сдался, создал новый проект, скопировал все файлы, и проблема была решена. Я до сих пор понятия не имею, что могло быть причиной этого. 17.03.2017
  • Это именно то, о чем я думал. 17.03.2017
  • Я сделал то же самое: создал новый проект и скопировал файлы, и теперь мои тесты компилируются. Интересно, что было не так с моей конфигурацией. 19.03.2017
  • Интересно, что я снова столкнулся с проблемой, когда изменил путь к этому вновь созданному проекту. Это заставляет меня подозревать, что это может быть какой-то относительный путь к JDK / SDK / любой другой проблеме. Вы также можете попытаться переместить новый проект в другое место — мне было бы очень любопытно узнать, возникает ли проблема снова для вас. 20.03.2017

Ответы:


1

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

27.03.2017
  • Спасибо! это похоже на какую-то проблему, связанную с кешем студии. 11.05.2017
  • У меня работало, даже когда перезагрузка и недействительные кеши не срабатывали 07.06.2017
  • Работает на меня. Я одновременно счастлив и разочарован, увидев, что это работает.... какая странная ошибка. 21.06.2017
  • Для меня было достаточно удалить папку .gradle 15.08.2017
  • Привет @Nathalie, если этот или любой другой ответ решил ваш вопрос, рассмотрите возможность принятия его, нажав на галочку. Это показывает более широкому сообществу, что вы нашли решение, и повышает репутацию как отвечающего, так и вас самих. Нет никаких обязательств делать это. 17.08.2017
  • Я столкнулся с той же проблемой. Это решение работает. Спасибо! 11.02.2018
  • Я мог бы потратить часы, чтобы исправить это. Это работает и для меня. Очень странный баг. 23.02.2018

  • 2

    Я также столкнулся с подобной проблемой. Вам просто нужно аннулировать кеши и перезапустить. Вот что я сделал:

    В Android Studio FILE -> INVALIDATE CACHES/RESTART...

    а затем нажмите кнопку «Недействительные кеши и перезапуск».

    25.02.2019

    3

    По-видимому, AS иногда неправильно загружает классы Android в путь к классам для тестирования. Альтернативой ручному удалению файлов .gradle и .idea является очистка кешей в AS и выполнение очистки: Файл > Недействительные кеши / Перезапуск
    ./gradlew clean

    В противном случае просто запустите свои тесты на терминале ./gradlew test

    25.01.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..