Roboelectri c ошибка тестового случая с Rx Java "java .lang.AssertionError: значения в позиции 0 различаются; ожидается" - PullRequest
0 голосов
/ 14 января 2020

Мой тестовый случай дал сбой при тестировании базы данных моей комнаты. Этот класс является промежуточным звеном между базой данных комнаты и моим классом репозитория ...

class Cache @Inject constructor(var newsDb:NewsDb  ,var newsDbMapper: NewsDbMApperImpl) : DataStore {
    override fun getNews(): Observable<List<News>> {
       return newsDb.newsDao().getNews().toObservable().map {
            it.map {
                newsEntity ->
                newsDbMapper.mapEntityToNews(newsEntity)
            }
        }
    }

    fun getNewsByTitle(title:String) :Observable<News> {
       return newsDb.newsDao().getNewsByTitle(title).map {t ->
            newsDbMapper.mapEntityToNews(t)
        }
    }

    fun saveNews(list:List<News>):Completable{
        return    Completable.defer{
            var listNews = list.map {
                newsDbMapper.mapNewsToEntity(it)
            }
            newsDb.newsDao().insertNews(listNews)
            Completable.complete()
        }
    }
}

Контрольный пример для этого класса:

@RunWith(RobolectricTestRunner::class)
class CacheTest {

    @get:Rule
    var instantTaskExecutorRule = InstantTaskExecutorRule()

    private lateinit var newsDB: NewsDb
    private lateinit var newsDbMapper: NewsDbMApperImpl
    private lateinit var cache: Cache

    @Before
    fun initDatabase() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        newsDB = Room.inMemoryDatabaseBuilder(context, NewsDb::class.java)
                .allowMainThreadQueries()
                .build()
        newsDbMapper = NewsDbMApperImpl()
        cache = Cache(newsDB, newsDbMapper)
    }

    @After
    @Throws(IOException::class)
    fun closeDatabase() {
        newsDB.close()
    }

    @Test
    fun insertNewsSavesData() {
        val newsList = listOf(ProjectDataFactory.makeNews())
        val testObserver = cache.saveNews(newsList).test()
        testObserver.assertComplete()
    }

    @Test
    fun getNewsReturnsData() {
        val newsList = arrayListOf(ProjectDataFactory.makeNews())
        cache.saveNews(newsList).test()
        val testObserver = cache.getNews().test()
        testObserver.await(5,TimeUnit.SECONDS)
        testObserver.assertValue(newsList)
    }

    @Test
    fun getNewsByTitleReturnsCorrectData() {
        val news = ProjectDataFactory.makeNews()
        val title = news.title
        val newsList = listOf(news)
        cache.saveNews(newsList).test()
        val testObserver = cache.getNewsByTitle(title).test()
        testObserver.assertValue(news)
    }


}

Но я получаю ошибку так:

java.lang.AssertionError: expected: [com.example.newreaderapplication.datastore.model.News@6017ad4a] (class: ArrayList) but was: [com.example.newreaderapplication.datastore.model.News@27e113e9] (class: ArrayList) (latch = 1, values = 1, errors = 0, completions = 0, timeout!)
Expected :[com.example.newreaderapplication.datastore.model.News@6017ad4a] (class: ArrayList) 
Actual   :[com.example.newreaderapplication.datastore.model.News@27e113e9] (class: ArrayList) (latch = 1, values = 1, errors = 0, completions = 0, timeout!)

Любые предложения будут полезны.

1 Ответ

0 голосов
/ 14 января 2020

Вы получаете два разных объекта List, поэтому equals () возвращает false при попытке сравнить их. Даже если ваш контент идентичен. Попробуйте сравнить размер списка и элемент содержимого списка по элементу

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