Bom dia a todos
Eu tava fazendo os testes, e após apagar o banco de dados, em alguns casos eu já queria ter o objeto inserido depois de apagar o db e antes dos teste e não ter que passar pela etapa de ver o teste sendo cadastrado e depois testar o objeto.
Eu queria fazer isso pois inserir diretamente tomaria menos tempo de teste e se fosse fazer o teste cadastrar o produto/usuario, isso tomaria tempo demais.
Eu tentei usar os métodos do dao, mas eles tem o problema de serem suspend, eu tentei desse jeito (esse é um file separado dos arquivos de teste):
private val usuarioLogin = "teste2"
private val emailLogin = "teste@gmail.com"
private val senhaLogin = "123456"
//numa função junto com o banco de dados
suspend fun limpaBancoDeDados(){
val db = AppDatabase.instanciaBanco(InstrumentationRegistry.getInstrumentation().targetContext)
db.clearAllTables()
db.usuarioDao()
.salva(Usuario(usuarioLogin, emailLogin, senhaLogin))
}
ou um jeito alternativo, inserindo numa funcao propria (esse vai ser o padrão)
suspend fun insereUsuarioNoDb(){
AppDatabase
.instanciaBanco(InstrumentationRegistry.getInstrumentation().targetContext)
.usuarioDao()
.salva(Usuario(usuarioLogin, emailLogin, senhaLogin))
}
E no arquivo de teste da activity
@Before
fun preparaAmbiente() = runTest{
limpaBancoDeDados()
insereUsuarioNoDb()
}
@After
fun finalizaTeste(){
limpaBancoDeDados()
}
@Test
fun deveRealizarOLogin_QuandoPreenchermosOsDadosDoUsuario() {
//o método de login esta em outra pasta
fazerLogin()
ActivityScenario.launch(PerfilUsuarioActivity::class.java)
checaSeOTextoAparece("teste2")
}
Mas o método de login não está indo, não sei se adicionou certo no banco de dados (deveria ter outra função), ou se pelo fato do meu computador ter um processador meio fraco fez o login antes de inserir os dados no db (eu deveria travar a tarefa de login para inserir os dados primeiro)