Na verdade, preciso obter uma resposta de uma chamada de API, para isso eu solicitei Context
.
robolectric
user1667968
fonte
fonte
RuntimeEnvironment.application
código estático (como métodos anotados com@BeforeClass
), pois o Robolectric provavelmente não será inicializado nesse ponto e o valor seránull
.Você pode usar
fonte
Usa isto:
fonte
Adicionar
E use:
fonte
Para o mais recente Robolectric 4.3 a partir de agora em 2019 `
`e
são ambos depreciados. Então estou usando
para obter o contexto.
fonte
Para obter o contexto do aplicativo, você deve fazer o seguinte:
fonte
Isso funciona para mim com Robolectric 3.5.1:
ShadowApplication.getInstance().applicationContext
fonte
RuntimeEnvironment.application
ouRuntimeEnvironment.application.getApplicationContext()
se estiver funcionando para você.A partir do lançamento 4.0-alpha-3 em 21 de julho, eles foram removidos
ShadowApplication.getApplicationContext()
. Fique comRuntimeEnvironment.application.getApplicationContext()
para quaisquer testes anotados com@RunWith(RobolectricTestRunner::class)
.Como um aparte, seu guia atual tem um exemplo de como obter recursos de string usando:
(Observe que os javadocs para
RuntimeEnvironment
eShadowApplication
atualmente refletem a versão não alfa 3.x.)fonte
Primeiro adicione o seguinte ao seu
build.gradle
:testImplementation 'androidx.test:core:1.2.0'
então use:
ApplicationProvider.getApplicationContext() as Application
fonte
Em alguns casos, você pode precisar do contexto do seu aplicativo em vez do contexto padrão do Robolectris. Por exemplo, se você deseja obter o nome do seu pacote. Por padrão, o Robolectric retornará o
org.robolectric.default
nome do seu pacote. Para obter o nome real do seu pacote, faça o seguinte:build.gradle
testImplementation 'org.robolectric:robolectric:4.2.1'
Sua aula de teste:
Certifique-se de que em seu diretório de trabalho Run / Debug Configurations está definido como: $ MODULE_DIR $
fonte
É mais seguro usar em
Robolectric.getShadowApplication()
vez de usarRobolectric.application
diretamente.fonte
Robolectric.application
Concordo com as respostas de @EugenMartynov e @rds ....
Um exemplo rápido pode ser encontrado em Volley-Marshmallow-Release
em NetworkImageViewTest.java
// mNIV = new NetworkImageView(Robolectric.application); mNIV = new NetworkImageView(RuntimeEnvironment.application);
O link do Volley está disponível em https://android.googlesource.com/platform/frameworks/volley/+/marshmallow-release
você precisa adicionar dependências no módulo de volley no android studio como:
dependencies { testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.robolectric:robolectric:3.1.2' }
fonte
No seu caso, acho que você deve estar ciente do que está realmente testando. Às vezes encontrando problemas de não testável código ou código aparentemente não testável é um sinal de que talvez seu código precise ser refatorado.
Para uma resposta de chamada de API, você pode não querer testar a própria chamada de API. Pode não ser necessário testar se é possível enviar / receber informações de qualquer serviço da web arbitrário, mas sim se seu código trata e processa sua resposta de uma maneira esperada.
Nesse caso, pode ser melhor refatorar o código que você está tentando testar. Divida a análise / tratamento de resposta para outra classe que aceita um simples
String
e faça seu teste nessa classe injetando respostas de string de amostra.Isso está mais ou menos seguindo as idéias de Responsabilidade Única e Inversão de Dependência (O S e D em SÓLIDO )
fonte
Ok, então eu sei que muitos outros disseram esta resposta antes e podem já estar desatualizados
Eu obtive null, porque a parte when () foi DEPOIS da inicialização do sut. Isso pode ajudar alguns de vocês.
também eu tenho o
no começo da aula
Além disso
fonte