Как исправить это исключение нулевого указателя в моих тестах Junit - PullRequest
1 голос
/ 16 февраля 2020
     This is the stacktrace    
     java.lang.NullPointerException
        at android.content.ContextWrapper.getSystemService(ContextWrapper.java:416)
        at androidx.room.RoomDatabase$JournalMode.resolve(RoomDatabase.java:517)
        at androidx.room.RoomDatabase$Builder.build(RoomDatabase.java:943)
        at com.example.movie_app.model.database.MovieDB$Companion.getDatabase(MovieDB.kt:26)
        at com.example.movie_app.repository.FavouriteRepository.<init>(FavouriteRepository.kt:22)
        at 
      com.example.movie_app.repository.FavouriteRepositoryTest.setUp(FavouriteRepositoryTest.kt:38)
        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.RunBefores.evaluate(RunBefores.java:24)
        at 

org.robolectri c .RobolectricTestRunner $ HelperTestRunner $ 1.evaluate (RobolectricTestRunner. java: 546) в org.robolectri c .internal.SandboxTestRunner $ 2.lambda $ оценивать $ 0 0. *: 252) в org.robolectri c .internal.bytecode.Sandbox.lambda $ runOnMainThread $ 0 (песочница. java: 89) в java .util.concurrent.FutureTask.run (FutureTask. java: 266) в java .util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java: 1149) в java .util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor. java: 624) в * 1016) * .lang.Thread.run (Тема. java: 748)

    This is my code
    The error seems to be pointing towards my Database and repository

    @RunWith(RobolectricTestRunner::class)
    @Config(manifest = Config.NONE)
    class FavouriteRepositoryTest {

        @Mock
        private lateinit var context: Context
        private lateinit var favouriteRepository: FavouriteRepository
        private lateinit var db: MovieDB
        private lateinit var movieDao: MovieDao
        lateinit var application: Application

        @Before
        fun setUp() {
            MockitoAnnotations.initMocks(this)
            db = Room.databaseBuilder(context, 
  MovieDB::class.java,"data").allowMainThreadQueries().build()
            movieDao = db.MovieDao()
            application = Application()
            favouriteRepository = FavouriteRepository(application)
        }

        @Test
        fun getFavouriteMessages() {
        }

        @Test
        fun insertFavourite() {

            runBlocking {
                favouriteRepository.insertFavourite(TestUtil.getFakeMovie())
                val favMovies = favouriteRepository.getFavouriteMessages()
                assertEquals(favMovies.value!!.isNotEmpty(),true)

    //            assert(favMovies.value.isNullOrEmpty())
            }
        }

        @Test
        fun deleteFavourite() {
        }
    }
...