Ошибка Logcat:
07 февраля 2019 10:52:49 okhttp3.mockwebserver.MockWebServer $ 2 выполнить
ИНФОРМАЦИЯ: MockWebServer [54845]начало приема соединений
[size = 9333 text = [\ n {\ n "userId": 1, \ n "id": 1, \ n "title": "quidem molesti…] 07 февраля,2019 10:52:49 okhttp3.mockwebserver.MockWebServer $ 3 processOneRequest
ИНФОРМАЦИЯ: MockWebServer [54845] получил запрос: GET / album? UserId = HTTP / 1.1 и ответил: HTTP / 1.1 200 OK
07 февраля 2019 10:52:51 okhttp3.mockwebserver.MockWebServer $ 2 acceptConnections ИНФОРМАЦИЯ: MockWebServer [54845] завершил прием соединений: сокет закрыт
java.lang.AssertionError: Значения различаются;Ожидаемый: 1, фактический: 0 (защелка = 1, значения = 0, ошибки = 0, завершения = 0, время ожидания!)
в io.reactivex.observers.BaseTestConsumer.fail (BaseTestConsumer.java: 189) на io.reactivex.observers.BaseTestConsumer.assertValueCount (BaseTestConsumer.java:515) на ir.hosseinabbasi.tdd.dao.TestAlbumDaoViaMockWebService.get список альбомов с фиктивного сервера (TestAlbumDaoViaMockWebService.kt: 58)
Вывод на системную печать:
[size=9333 text=[\n {\n "userId": 1,\n "id": 1,\n "title": "quidem molesti…]
Testкласс:
@RunWith(JUnit4::class)
class TestAlbumDaoViaMockWebService {
lateinit var albumDao: AlbumDao
lateinit var mockWebServer: MockWebServer
@Before
@Throws
fun setup() {
mockWebServer = MockWebServer()
mockWebServer.start()
val okHttpClient = OkHttpClient.Builder().build()
val retrofit = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(mockWebServer.url("/").toString())
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
albumDao = retrofit.create(AlbumDao::class.java)
}
@Test
fun `get list of albums from mocked server`() {
val testObserver = TestObserver<List<AlbumDto>>()
val path = "/albums?userId="
val mockResponse = MockResponse()
.setResponseCode(200)
.setBody(getJson("json/albums.json"))
System.out.println(mockResponse.body.toString())
mockWebServer.enqueue(mockResponse)
albumDao.getAlbums("").subscribe()
testObserver.awaitTerminalEvent(2, TimeUnit.SECONDS)
testObserver.assertNoErrors()
testObserver.assertValueCount(1) //Error on this line
val request = mockWebServer.takeRequest()
assertEquals(path, request.path)
}
@After
@Throws
fun tearDown() {
mockWebServer.shutdown()
}
}
album.json:
[
{
"userId": 1,
"id": 1,
"title": "quidem molestiae enim"
},
...and etc...
,{
"userId": 10,
"id": 100,
"title": "enim repellat iste"
}
]
Метод getJson:
class Utils {
companion object {
fun getJson(path: String): String {
val uri = this.javaClass.classLoader.getResource(path)
val file = File(uri.path)
return String(file.readBytes())
}
}
}
BuildConfig в моем модуле приложения:
buildConfigField("String", "BASE_URL", "\"https://jsonplaceholder.typicode.com\"")
Модификация сборки в моем модуле приложения:
class NetDao {
fun provideRetrofit(): Retrofit =
Retrofit.Builder()
.baseUrl(BuildConfig.BASE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build()
}
Версия MockWebServer: 3.12.1
Если я прокомментирую эту строку, тест будет пройден: testObserver.assertValueCount(1)