Я видел несколько старых вопросов об использовании обычного средства создания макетов Mockito. т. е. используя зависимость Mockito-core. Я думаю, что это не дубликат, потому что вместо этого я использую новый встроенный создатель макетов изockito-inline. Он поддерживает издевательство над конструктором, поэтому я думаю, что теперь это возможно. Я пытаюсь удалить зависимость PowerMockito, которую я использовал ранее, поэтому использование PowerMockito здесь не вариант. Я пытаюсь сделать это с помощью JUnit 4 и Mockito 5.2.
У меня есть класс в приложении для Android. BitmapCache расширяет LruCache. Конструктор LruCache выдает исключение-заглушку, как и все методы в android.os, если он не запускается на устройстве Android. Мой конструктор моего класса вызывает super(cache_size); внутри своего конструктора. Поэтому я не могу создать экземпляр для тестирования. Я хочу имитировать LruCache, а не BitmapCache, и я хочу подавить вызовы конструктора LruCache. Кажется, метод mockConstruction Mockito по-прежнему вызывает конструктор имитируемого класса. Запуск исключения-заглушки.
Возможно ли использовать функцию «mockConstruction», «mockConstructionWithAnswer» или какую-либо другую функцию с помощью нового встроенного средства создания макетов? Я хочу полностью запретить конструктору LruCache выдавать исключение-заглушку. В идеале, если это возможно, вообще не допускайте его вызова или заглушайте его пустой функцией.
Очевидно, я не могу изменить код в родительском классе, и для этого необходимо расширить LruCache. . Я думаю, что это обычная проблема при тестировании кода Android без запуска виртуальной машины для запуска тестов на устройстве Android.
Я пробовал установить defaultAnswer для всех постоянных значений, включая глубокие макеты и использование методаockConstructionWithAnswer, но, похоже, на самом деле они издеваются не над конструктором, а над любым другим методом.
Исключение всегда выдается из строки внутри попробуйте блок, где я создаю экземпляр объекта BitmapCache для тестирования.
Я также не уверен, что это проблема, связанная с тем, что LruCache является универсальным, поэтому мое издевательство выглядит так для принудительного приведения LruCache.class в Class.
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class))
Я также пробовал оба этих подхода, но ни один из них не подавляет вызов конструктора LruCache.
С помощью макета, определенного как< /p>
LruCache mockCache =
mock((Class) (Class) LruCache.class;
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class,
(mock, context)->{
when(mock).thenReturn(mockCache);
})){
и
try (MockedConstruction lruCache =
mockConstructionWithAnswer(
(Class) (Class) LruCache.class,
(invocation) -> mockCache)) {
Обновление: Я попытался имитировать конструктор BitmapCache, но, похоже, он не вызывает конструктор LruCache. Я думаю, что проблема, описанная выше, заключается либо в том, что методockConstruction не работает для вызовов super(), либо я неправильно указываю класс или конструкцию в своих вызовах для методаockConstruction иockConstructionWithAnswer.
Я склоняюсь к тому, что вызов super() не перехватывается. Я попытался издеваться над обоими классами, как показано ниже, и как только дочерний класс пытается вызвать «издеваемый» метод родительского класса, он фактически вызывает реальный метод и выдает исключение.
Bitmap bitmap1 = mock(Bitmap.class);
Bitmap bitmap2 = mock(Bitmap.class);
Uri uri1 = mock(Uri.class);
Uri uri2 = mock(Uri.class);
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class,
(mock, context)->{
// These four calls should prevent calls to the real LruCache
// get or put methods from being called.
doNothing().when(mock.put(any(Uri.class), any(Bitmap.class)));
when(mock.get(uri1)).thenReturn(bitmap1);
when(mock.get(uri2)).thenReturn(bitmap2);
when(mock.get(any(Uri.class))).thenReturn(null);
})) {
try (MockedConstruction bitmapCache =
mockConstruction(BitmapCache.class, (mock, context)->{
when(mock.put(any(Uri.class), any(Bitmap.class)))
.thenCallRealMethod();
when(mock.get(any(Uri.class)))
.thenCallRealMethod();
})) {
BitmapLoader loader = mock(BitmapLoader.class);
cache = new BitmapCache(cacheSize, loader);
// This call calls the real BitmapCache method as expected,
// but then that method calls the real LruCache.put method
// instead of the mock.
cache.put(uri1, bitmap1);
cache.put(uri2, bitmap2);
assertEquals(cache.get(uri1), bitmap1);
assertEquals(cache.get(uri2), bitmap2);
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... ass-constr
Как я могу высмеять суперкласс и подавить вызовы фактического конструктора суперкласса с помощью Mockito-inline? ⇐ Android
Форум для тех, кто программирует под Android
1714967084
Anonymous
Я видел несколько старых вопросов об использовании обычного средства создания макетов Mockito. т. е. используя зависимость Mockito-core. Я думаю, что это не дубликат, потому что вместо этого я использую новый встроенный создатель макетов изockito-inline. Он поддерживает издевательство над конструктором, поэтому я думаю, что теперь это возможно. Я пытаюсь удалить зависимость PowerMockito, которую я использовал ранее, поэтому использование PowerMockito здесь не вариант. Я пытаюсь сделать это с помощью JUnit 4 и Mockito 5.2.
У меня есть класс в приложении для Android. BitmapCache расширяет LruCache. Конструктор LruCache выдает исключение-заглушку, как и все методы в android.os, если он не запускается на устройстве Android. Мой конструктор моего класса вызывает super(cache_size); внутри своего конструктора. Поэтому я не могу создать экземпляр для тестирования. Я хочу имитировать LruCache, а не BitmapCache, и я хочу подавить вызовы конструктора LruCache. Кажется, метод mockConstruction Mockito по-прежнему вызывает конструктор имитируемого класса. Запуск исключения-заглушки.
Возможно ли использовать функцию «mockConstruction», «mockConstructionWithAnswer» или какую-либо другую функцию с помощью нового встроенного средства создания макетов? Я хочу полностью запретить конструктору LruCache выдавать исключение-заглушку. В идеале, если это возможно, вообще не допускайте его вызова или заглушайте его пустой функцией.
Очевидно, я не могу изменить код в родительском классе, и для этого необходимо расширить LruCache. . Я думаю, что это обычная проблема при тестировании кода Android без запуска виртуальной машины для запуска тестов на устройстве Android.
Я пробовал установить defaultAnswer для всех постоянных значений, включая глубокие макеты и использование методаockConstructionWithAnswer, но, похоже, на самом деле они издеваются не над конструктором, а над любым другим методом.
Исключение всегда выдается из строки внутри попробуйте блок, где я создаю экземпляр объекта BitmapCache для тестирования.
Я также не уверен, что это проблема, связанная с тем, что LruCache является универсальным, поэтому мое издевательство выглядит так для принудительного приведения LruCache.class в Class.
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class))
Я также пробовал оба этих подхода, но ни один из них не подавляет вызов конструктора LruCache.
С помощью макета, определенного как< /p>
LruCache mockCache =
mock((Class) (Class) LruCache.class;
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class,
(mock, context)->{
when(mock).thenReturn(mockCache);
})){
и
try (MockedConstruction lruCache =
mockConstructionWithAnswer(
(Class) (Class) LruCache.class,
(invocation) -> mockCache)) {
Обновление: Я попытался имитировать конструктор BitmapCache, но, похоже, он не вызывает конструктор LruCache. Я думаю, что проблема, описанная выше, заключается либо в том, что методockConstruction не работает для вызовов super(), либо я неправильно указываю класс или конструкцию в своих вызовах для методаockConstruction иockConstructionWithAnswer.
Я склоняюсь к тому, что вызов super() не перехватывается. Я попытался издеваться над обоими классами, как показано ниже, и как только дочерний класс пытается вызвать «издеваемый» метод родительского класса, он фактически вызывает реальный метод и выдает исключение.
Bitmap bitmap1 = mock(Bitmap.class);
Bitmap bitmap2 = mock(Bitmap.class);
Uri uri1 = mock(Uri.class);
Uri uri2 = mock(Uri.class);
try (MockedConstruction lruCache =
mockConstruction(
(Class) (Class) LruCache.class,
(mock, context)->{
// These four calls should prevent calls to the real LruCache
// get or put methods from being called.
doNothing().when(mock.put(any(Uri.class), any(Bitmap.class)));
when(mock.get(uri1)).thenReturn(bitmap1);
when(mock.get(uri2)).thenReturn(bitmap2);
when(mock.get(any(Uri.class))).thenReturn(null);
})) {
try (MockedConstruction bitmapCache =
mockConstruction(BitmapCache.class, (mock, context)->{
when(mock.put(any(Uri.class), any(Bitmap.class)))
.thenCallRealMethod();
when(mock.get(any(Uri.class)))
.thenCallRealMethod();
})) {
BitmapLoader loader = mock(BitmapLoader.class);
cache = new BitmapCache(cacheSize, loader);
// This call calls the real BitmapCache method as expected,
// but then that method calls the real LruCache.put method
// instead of the mock.
cache.put(uri1, bitmap1);
cache.put(uri2, bitmap2);
assertEquals(cache.get(uri1), bitmap1);
assertEquals(cache.get(uri2), bitmap2);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78431316/how-can-i-mock-a-super-class-and-suppress-calls-to-the-actual-super-class-constr[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия