projetos em produção com um time de cinquenta e treze devs •Atual campeão de Street Fighter da Concrete •Evangelista de Erlang/Elixir e real time anything
at org.junit.Assert.assertTrue(Assert.java:52) at br.com.concrete.androidtesting.AnotherUniverseTest.assertSmt(AnotherUniverseTest.kt:9) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) ... at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) ...
at org.junit.Assert.assertTrue(Assert.java:52) at br.com.concrete.androidtesting.UniverseTest.assertSmt(UniverseTest.kt:12) at java.lang.reflect.Method.invoke(Native Method) ... at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at org.junit.runner.JUnitCore.run(JUnitCore.java:115) at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:58) at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:369) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1932)
that monitor specifc components in a system (...). When an application contains instrumentation code, it can be managed using a management tool. (...) https://en.wikipedia.org/wiki/Instrumentation_(computer_programmin g)
que monitoram componentes específcos em um sistema (...). Quando uma aplicação contém código de instrumentação, ela pode ser gerenciada por uma ferramenta. (...) VERSÃO #BRHUEHUEHU
essencialmente diferente •Durante a instrumentação, monitoramos o app ao invés de comandarmos o app •Portanto, nossa validação de aderência de especifcação tem valor diferente para cada tipo
pelo cliente, incluindo devices físicos 1.Tempo de execução 2. Não simula/emula/imita o sistema 2. Flakiness (falhas aleatórias) 3. Android é o front-end e, portanto, precisa de qualquer maneira ter testes de interação 3. Complexidade de setup de integração contínua
uma simulação/emulação/imitação de um sistema operacional 2. Estabilidade de testes 2. É um runtime diferente que pode interpretar o código diferente 3. Facilidade de setup 3. Está distante do que é executado na mão do usuário
está extremamente mais estável ◦IdlingRegistry ajuda a confgurar timing de UI ◦Android Test Orchestrator garante a estabilidade da suite •Milhares de serviços de device farm estão aparecendo: ◦Firebase Test Lab ◦Amazon device farm •O Robolectric está bem ativo ultimamente com várias atualizações visando paridade de API MINIMIZANDO DESVANTAGENS - instrumentado
não for possível desacoplar MINIMIZANDO DESVANTAGENS - local O valor gerado mesmo pelo teste que não depende do Android ou do teste que usa mocks é diferente daquele gerado pelo teste instrumentado. No fm das contas, seu código será executado em outro ambiente.
that invokes a unit of work in the system and then checks a single assumption about the behavior of that unit of work. (...) http://artofunittesting.com/defnition-of-a-unit-test/
cenários - Escritos em linguagem natural normalmente usando Gherking (cucumber) - São black-box (não se importam com a implementação) - Idealmente sem mocks/fakes/stubs - Documentação viva e executável das regras do projeto
until paid for Coffee should not be served until the button has been pressed If there is no coffee left then money should be refunded Scenario: Buy last coffee Given there are 1 coffees left in the machine And I have deposited 1$ When I press the coffee button Then I should be served a coffee