Excepción de conexión mientras se ejecuta la Prueba de instrumentación en un dispositivo real.
Tengo un problema no trivial. Creamos un back-end en un dispositivo Android. Utilizando Ktor para el REST-Service.
Estoy tratando de ejecutar una prueba instrumental como:
@HiltAndroidTest
@Config(application = HiltTestApplication::class)
@RunWith(AndroidJUnit4::class)
class RestServiceTest {
@get:Rule
var hiltRule = HiltAndroidRule(this)
@get:Rule
var instantTaskExecutorRule = InstantTaskExecutorRule()
<pre><code>@Inject
lateinit var testServer: TestServer
private val retrofit = Retrofit.Builder()
.baseUrl("http://localhost:8080/askp/")
.addConverterFactory(
MoshiConverterFactory.create(
Moshi.Builder().add(KotlinJsonAdapterFactory()).build()
)
)
.build()
private val api = retrofit.create(SuvApi::class.java)
@Before
fun setup() {
hiltRule.inject()
Executors.newSingleThreadExecutor().execute {
testServer.start()
}
}
@Test
fun successTransactionsHistory() = runBlocking{
delay(5000)
val response = api.getTransactionHistory(1)
Assert.assertNotNull(response)
}
</code></pre>
<p>}
Pero cuando la función de prueba lo llama, arroja una excepción de conexión (ConnectException) ECONNREFUSED (Conexión rechazada).
La prueba se está ejecutando en un dispositivo físico real y yo establezco la conexión de la misma manera que en el código de producción y funciona.
davy.ai
Parece que el servidor de prueba no está funcionando correctamente. ¿Ha intentado ejecutar el servidor de prueba en un hilo separado? Parece que el servidor de prueba no se está iniciando a tiempo para que la prueba se ejecute. Podría intentar agregar un retraso antes de que se ejecute la prueba para darle al servidor de prueba tiempo suficiente para iniciarse. También podría intentar ejecutar el servidor de prueba en un hilo separado para asegurarse de que esté en ejecución antes de que se ejecute la prueba.