Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Testes unitários #8

Open
janosimas opened this issue Aug 16, 2018 · 4 comments
Open

Testes unitários #8

janosimas opened this issue Aug 16, 2018 · 4 comments
Assignees
Labels
enhancement New feature or request

Comments

@janosimas
Copy link
Contributor

Criar um conjunto de testes unitários

@janosimas janosimas added the enhancement New feature or request label Aug 16, 2018
@janosimas janosimas self-assigned this Aug 21, 2018
@janosimas
Copy link
Contributor Author

@vinipaschoal Eu abri um pull request com alguns testes pra factory mas achei um comportamento estranho.
Um dos testes falha, pode ver o log em https://travis-ci.org/EsfingeFramework/liveprog , e o outro não.
Qual é o comportamento esperado?

O caso que não falha:
Crio objetos live em modo producao, atualizo e crio em modo PRODUCAO
...
Crio um objeto live em modo TESTE.
verifico se o método saveLiveClass é chamado, NÃO é chamado.

caso com problema:
Crio objetos live em modo TESTE, atualizo e crio em modo TESTE
...
Crio um objeto live em modo PRODUCAO.
verifico se o método saveLiveClass é chamado, é chamado.

@vinipaschoal
Copy link
Contributor

Está dando erro porque você está mocando o BD.
No caso que está dando erro, quando você cria um objeto em modo produção, se o BD fosse real ele voltaria a versão de producao cadastrada no banco, mas como é um mock, ele esta voltando nulo, o que está fazendo o factory chamar novamente o método saveLiveClass.

@janosimas
Copy link
Contributor Author

Até aí eu entendo,
mas pq um chama o metodo saveLiveClass e outro não?

@vinipaschoal
Copy link
Contributor

vinipaschoal commented Aug 30, 2018

Como funciona internamente os seus testes:

  • No primeiro caso (PRODUÇÃO):
  1. você pede para o factory criar um objeto em modo produção:
    1.1) o factory procura no cache interno de classes versão produção se a classe já foi carregada
    1.2) o cache de classes versão produção NÃO contém a classe
    1.3) o factory procura no BD essa classe na versão produção
    1.4) a classe não está cadastrada no BD
    1.5) o factory salva no banco essa versão da classe
    1.5.1) o BD verifica que não existe nenhuma versão dessa classe cadastrada no BD, então salva no BD a mesma classe nas versões produção e teste
    1.6) o factory pede para o ClassLoader carregar a classe
    1.7) o ClassLoader verifica que essa classe já está carregada (pois ela é a classe original, que é carregada no início da aplicação) e retorna a classe original
    1.8) o factory guarda essa classe no cache de classes versão produção
    1.9) o factory cria um novo objeto da classe, cria o proxy e retorna

  2. você pede para o factory atualizar a classe para a nova versão:
    2.1) o factory salva a nova versão da classe no BD
    2.1.1) o BD salva essa versão como uma versão de teste - nesse momento, tem-se que a versão de produção é a versão original da classe (passo 1.5.1) e a versão de teste é essa nova versão salva
    2.2) o factory salva essa nova versão no cache de classes versão teste
    2.3) o factory notifica os proxies e retorna

  3. você pede para o factory criar um novo objeto em modo produção:
    3.1) o factory procura no cache interno de classes versão produção se a classe já foi carregada
    3.2) o cache de classes versão produção JÁ contém a classe (passo 1.8)
    3.3) o factory cria um novo objeto da classe, cria o proxy e retorna

  4. você pede para o factory criar um novo objeto em modo teste:
    4.1) o factory procura no cache interno de classes versão teste se a classe já foi carregada
    4.2) o cache de classes versão testes JÁ contém a classe (passo 2.2)
    4.3) o factory cria um novo objeto da classe, cria o proxy e retorna

  • No segundo caso (TESTE):
  1. você pede para o factory criar um objeto em modo teste:
    1.1) o factory procura no cache interno de classes versão teste se a classe já foi carregada
    1.2) o cache de classes versão teste NÃO contém a classe
    1.3) o factory procura no BD essa classe na versão teste
    1.4) a classe não está cadastrada no BD
    1.5) o factory salva no banco essa versão da classe
    1.5.1) o BD verifica que não existe nenhuma versão dessa classe cadastrada no BD, então salva no BD a mesma classe nas versões produção e teste
    1.6) o factory pede para o ClassLoader carregar a classe
    1.7) o ClassLoader verifica que essa classe já está carregada (pois ela é a classe original, que é carregada no início da aplicação) e retorna a classe original
    1.8) o factory guarda essa classe no cache de classes versão teste
    1.9) o factory cria um novo objeto da classe, cria o proxy e retorna

  2. você pede para o factory atualizar a classe para a nova versão:
    2.1) o factory salva a nova versão da classe no BD
    2.1.1) o BD salva essa versão como uma versão de teste - nesse momento, tem-se que a versão de produção é a versão original da classe (passo 1.5.1) e a versão de teste é essa nova versão salva
    2.2) o factory salva essa nova versão no cache de classes versão teste
    2.3) o factory notifica os proxies e retorna

  3. você pede para o factory criar um novo objeto em modo teste:
    3.1) o factory procura no cache interno de classes versão teste se a classe já foi carregada
    3.2) o cache de classes versão teste JÁ contém a classe (passo 2.2)
    3.3) o factory cria um novo objeto da classe, cria o proxy e retorna

  4. você pede para o factory criar um novo objeto em modo produção:
    4.1) o factory procura no cache interno de classes versão produção se a classe já foi carregada
    4.2) o cache de classes versão produção NÃO contém a classe
    4.3) o factory procura no BD essa classe na versão produção
    4.4) a classe já estaria cadastrada no BD (passo 1.5.1) e seria retornada, MAS como você está usando um mock do BD, aqui retorna null!

4.5) o que aconteceria no uso real:
4.5.1) o factory pede para o ClassLoader carregar a classe retornada do banco
4.5.2) o ClassLoader verifica que essa classe já está carregada (pois ela é a classe original, que é carregada no início da aplicação) e retorna a classe original
4.5.3) o factory guarda essa classe no cache de classes versão produção
4.5.4) o factory cria um novo objeto da classe, cria o proxy e retorna

4.6) o que está acontecendo no caso de teste:
4.6.1) a classe não está cadastrada no BD
4.6.2) o factory salva no banco essa versão da classe (aqui sinaliza o FAIL no teste!)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants