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

Não consegui rodar o teste, aparece um erro como se a classe estivesse privada ou como final.

Minha classe está:

public class ListaLeilaoAdapter extends RecyclerView.Adapter<ListaLeilaoAdapter.ViewHolder> { 

    private final List<Leilao> leiloes;                                                       
    private final Context context;                                                            
    private final MoedaUltil formatadorDeMoeda;                                               
    private OnItemClickListener onItemClickListener;                                          

    public ListaLeilaoAdapter(Context context) {                                              
        this.context = context;                                                               
        this.leiloes = new ArrayList<>();                                                     
        this.formatadorDeMoeda = new MoedaUltil();                                            
    }    

    // Implementação
}

E aparece o seguinte erro:

org.mockito.exceptions.base.MockitoException: 
Mockito cannot mock this class: class br.com.alura.leilao.ui.recyclerview.adapter.ListaLeilaoAdapter.

Mockito can only mock non-private & non-final classes.
If you're not sure why you're getting this error, please report to the mailing list.
11 respostas

Oi Agatha, tudo bem ?

Isso geralmente acontece no kotlin, pelo padrão ser final, se estiver fazendo em java, esse erro não devia acontecer.

Oi Matheus, Tudo bem?

Estou fazendo em java sim, achei muito estranho me dar esse erro, não consegui resolver. Você consegue me ajudar?

manda seu teste pra gente pf

@RunWith(MockitoJUnitRunner.class)
public class ListaLeilaoAdapterTest {

    @Mock
    private Context context;
    @Spy
    private ListaLeilaoAdapter adapter = new ListaLeilaoAdapter(context);

    @Test
    public void deve_AtualizarListaDeLeiloesAdapter_QuandoRecebeuUmaListaDeLeiloes() {
//        MockitoAnnotations.initMocks(this);
        doNothing().when(adapter).notificaAdapter();

        adapter.atualiza(new ArrayList<>(Arrays.asList(
                new Leilao("console"),
                new Leilao("computador")
        )));

        int quantidadeDevolvida = adapter.getItemCount();
        verify(adapter).notificaAdapter();
        assertThat(quantidadeDevolvida, is(2));

    }

}
solução!

Consegue falar pra gente como está seu build.gradle ?

To suspeitando que possa ser algum problema de dependência e também versão do java no seu projeto

Opa, vou tentar jogar aqui meus 2 centavos, pode ser que a classe tenha instanciado algum objeto final por baixo dos panos, tente fazer este import:

testImplementation 'org.mockito:mockito-inline:2.13.0' // ou versão superior

caso o erro persista crie um diretório resources na pasta raiz do app insira um arquivo de nome org.mockito.plugins.MockMaker contendo apenas uma linha, escrito mock-maker-inline

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Dando certo ou errado, só avisar a gente aqui

Tentei dos dois jeitos, me deu outro erro:

Caused by: java.lang.IllegalStateException: Failed to load interface org.mockito.plugins.MockMaker implementation declared in java.lang.CompoundEnumeration@1e730495
    at org.mockito.internal.configuration.plugins.PluginLoader.loadImpl(PluginLoader.java:94)
    at org.mockito.internal.configuration.plugins.PluginLoader.loadPlugin(PluginLoader.java:48)
    at org.mockito.internal.configuration.plugins.PluginRegistry.<init>(PluginRegistry.java:20)
    at org.mockito.internal.configuration.plugins.Plugins.<clinit>(Plugins.java:18)
    at org.mockito.internal.configuration.GlobalConfiguration.tryGetPluginAnnotationEngine(GlobalConfiguration.java:55)
    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:68)
    ... 22 more
Caused by: org.mockito.exceptions.base.MockitoInitializationException: 
Could not initialize inline Byte Buddy mock maker. (This mock maker is not supported on Android.)

Java               : 11
JVM vendor name    : JetBrains s.r.o
JVM vendor version : 11.0.8+10-b944.6842174
JVM name           : OpenJDK 64-Bit Server VM
JVM version        : 11.0.8+10-b944.6842174
JVM info           : mixed mode
OS name            : Windows 10
OS version         : 10.0

Voce tá usando java 11, isso já ajuda demais a gente !

Qual versão da biblioteca vc esta usando ?

Desculpa, qual biblioteca você quer saber a versão? Onde eu vejo isso?

manda pra gente o conteúdo do arquivo build.gradle

Oi, realmente era por causa da versão do java, eu modifiquei a versão do mokito:

Antes estava: testImplementation 'org.mockito:mockito-core:2.15.0'

Mudei para: testImplementation 'org.mockito:mockito-core:2.18.0'

Funcionou, obrigada pela ajuda.