Retrofit2 で作成した Rest サービスをテストしたいと思います。すべての応答を個別にモックしたくはありませんが、Web サーバー全体をモックしたいと考えています。MockServer で可能であることがわかりました。しかし、私はそれを扱うことができません。
Retrofit2 のベース URL は、ビルド タイプによって指定されます。たとえば、次のように「ステージング」などの新しいビルドタイプを作成しようとしました。
staging {
buildConfigField "String", "APP_BASE_URL", "\"http://test.com\""
}
gradle configにも追加されました
testBuildType "staging"
しかし、私のテストはもう機能しません。Intellij ではすべてが赤くなります。依存関係が見つかりません。
基本的に私がやりたいことは、テストごとに、特定の URL を持つモック Web サーバーが必要なことです。この URL は Retrofit2 インターフェイスのベース URL で使用され、mockwebserver が特定の JSON ファイル応答で応答するようにします。
例えば:
@Before
override public fun setUp() {
super.setUp()
server = MockWebServer()
server.url("http://test.com")
}
@Test
fun forbiddenLogin() {
server.enqueue(MockResponse()
.setResponseCode(403)
.setBody("{\"message\": \"Forbidden access!\"}")
)
server.start()
//HOW TO CALL AND TESTS MY SERVICES HERE?
}
詳細については、私の Retrofit2 サービスは RxJava Observable を使用しています
@POST("/rest/login")
@FormUrlEncoded
fun login(
@Field("login") login: String,
@Field("password") password: String
): Observable<ApiWrapper<UserDTO>>