2015-09-28 8 views
2

Мне интересно, есть ли способ избежать насмешек над некоторыми классами. Я работаю над большей единицей тестирования, связанной с уведомлениями. Я столкнулся с несколькими проблемами, которые я смог исправить в основном.Модульное тестирование с использованием реальной реализации (классов)

Теперь я застрял с некоторыми классами, такими как PendingIntent, Notification.Builder и, возможно, даже Notification. Я использую библиотеку сопоставлений, поэтому я не могу внедрить свой код, чтобы издеваться над всем. Я до сих пор не знаю, как издеваться над шаблоном строителя.

Не могли бы вы дать мне ссылку, как я могу избежать того, что Android Studio вводит фиктивные объекты, которые возвращают null при каждом вызове? Я хочу, чтобы белый список некоторых классов. Я имею в виду, я знаю, что некоторые классы легко издеваются, как Intent или SharedPreferences.

+0

'@ Spy' делает именно это. Однако я не уверен, что это именно то, что вы ищете. Не могли бы вы предоставить примерный класс, который вы хотите протестировать, и какие поля вы хотите выполнить для конкретной реализации. – Magnilex

ответ

2

Я нашел отличную библиотеку под названием unmock, которая точно делает то, что мне нужно. Вот мой пример конфигурация, который мне нужен для моих тестов:

unMock { 
    // URI to download the android-all.jar from. e.g. https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/ 
    downloadFrom 'https://oss.sonatype.org/content/groups/public/org/robolectric/android-all/4.3_r2-robolectric-0/android-all-4.3_r2-robolectric-0.jar' 

    keep 'android.os.Bundle' 
    keepStartingWith 'android.content.Intent' 
    keepStartingWith 'android.content.ComponentName' 
    keep 'android.app.Notification' 
    keepStartingWith 'android.app.Notification$' 
    keep 'android.net.Uri' 
    keepStartingWith 'android.widget.RemoteViews' 
    keep 'android.util.SparseIntArray' 
    keep 'android.util.SparseArray' 
    keep 'com.android.internal.util.ArrayUtils' 
    keep 'com.android.internal.util.GrowingArrayUtils' 
    keep 'libcore.util.EmptyArray' 

    keepStartingWith "libcore." 
    keepStartingWith "com.android.internal.R" 
    keepStartingWith "com.android.internal.util." 
    keepAndRename "java.nio.charset.Charsets" to "xjava.nio.charset.Charsets" 
} 

PendingIntent В s не используется, так как она требует некоторой местную реализации, однако я мог дразнить соответствующие части, чтобы я мог проверить их устройство в любом случае.

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