Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Como mockar singleton FirebaseCrashlytics?

Estou testando um fluxo de exceção e meu test de widget para na linha que o craslytics faz o record error. Quais as alternativas para isso?

8 respostas

Bom dia Mateus, tudo bom?

Você poderia disponibilizar pra mim a parte do seu código onde está o Crashlytics?

O ideal seria transformar essa API em uma classe que estende (extends) o Mock, mas não posso garantir já que não sei como está seu código customizado! Algumas coisas requerem um pouco mais de tato ( caso vc tenha feito uma série de Exceptions para pegar erros distintos, vamos ter mais um pouquinho de trabalho ehhehe)

solução!

Tudo bem.

eu estava usando direto assim: FirebaseCrashlytics.instance.recordError em varias partes do codigo. Acabei criando uma classe service tipo wrapper e registro ela com getIt no inicio do projeto:

class CrashlyticsService { getInstance() => FirebaseCrashlytics.instance;

Future recordError(exception, StackTrace stack, {reason, Iterable information, bool printDetails}) { getInstance().recordError(exception, stack, reason: reason); }

e entao faço o mock assim: class MockFBCrashlytics extends Mock implements CrashlyticsService{}

me atendeu mas é isso mesmo ou tem outra alternativa?

}

Perfeito é isso mesmo amigo!

Você foi direto no problema!

Devemos criar uma instância para poder Mockar o serviço e finalmente passar no teste!

Continue mandando ver :D

valeu! Aproveitnando queria tirar outra duvida. É comum nos projetos flutter ter main para cada ambiente. main_dev.dart, main_hom.dart.

Como eu testo se os parametros inciaiis de um AppConfig estao corretos? Seria um teste de unidade ou de widget?

Buenos dias muchacho!

Então vamos lá:

Em questão de formato de projeto, depende de com quem você está trabalhando. Geralmente os desenvolvedores deixam apenas uma main, pois ela tem mais detalhes que se tornam difíceis de encontrar se temos muitas main.

Porém, Contudo, Entretanto, Todavia, existem aqueles que adotam a prática de usar a nomenclatura main para organizar os códigos. Tudo isso depende da equipe que estará trabalhando :)

Sobre o AppConfig:

Dado que o AppConfig é uma classe que criamos para ajudar a manter o padrão do nosso aplicativo, possuindo parâmetros diversos:

class AppConfig {
  AppConfig({
    @required this.appName,
    @required this.flavorName,
    @required this.apiBaseUrl,
  });

  final String appName;
  final String flavorName;
  final String apiBaseUrl;
}

Usar um simples teste de unidade pode ser suficiente dependendo da complexidade da sua Classe.

No meu caso tenho um main para cada ambiente por faiclitar a geracao de build final. Minha main_dev

void main() {
  AppConfig(
    ambiente: Ambiente.DEV,
    apiBaseUrl: Constantes.URL_BASE_DEV,
  );

  startApp();
}

Quero fazer um teste de unidade para garantir os valores. entao eu fiz:

void main() { test('ambiente dev', () { mainDev.main();

expect(AppConfig.instance.ambiente, Ambiente.DEV);
expect(AppConfig.instance.apiBaseUrl, Constantes.URL_BASE_DEV);

});

} `

Só que esse teste tem hora que roda e tem hora que nao. Aparece o erro: MissingPluginException(No implementation found for method Firebase#initializeCore on channel plugins.flutter.io/firebase_core) package:flutter/src/services/platform_channel.dart 157:7 MethodChannel._invokeMethod

I see you are a man of culture as well.

Vejo que você ta usando FireBase, queremos fazer um curso mais completo sobre ele.

Seguinte o Firebase tem seus pontos fracos, e um deles é que nem sempre ele responde no tempo devido e você acaba tendo de esperar um pouco mais que o normal pela resposta do URL.

Nesse caso a versão do seu firebase_core deve estar incompatível com algum pacote seu ou simplesmente a versão do flutter que você usa não está lidando tão bem com essa comunicação.

Não precisa se preocupar tanto, só saiba que o Firebase é manhoso e as vezes responde quando quer :)

Caso ele pare de funcionar 100% das vezes ai sim devemos fazer alguma alteração

Vou te pedir pra abrir outra duvida se tiver outro problema, assim os outros alunos podem achar com facilidade sua duvida!

ok, obrigado pela resposta. Se precisar abro uma nova thread

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software