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

Problemas ao atualizar da versão 1.5.1 para versão 1.5.2 final #443

Closed
otmarjr opened this issue Dec 12, 2016 · 12 comments
Closed

Problemas ao atualizar da versão 1.5.1 para versão 1.5.2 final #443

otmarjr opened this issue Dec 12, 2016 · 12 comments

Comments

@otmarjr
Copy link

otmarjr commented Dec 12, 2016

Olá!

Hoje temos uma larga base de código que utiliza os testes automatizados no padrão de adicionar histórias para reuso por método de teste em cada classe de teste separada.

Após tentar atualizar para a versão 1.5.2, apesar do behave.properties não possuir a propriedade legacyRunner definida como false, noto que a execução está com o novo padrão. Adiciono as histórias de reuso por método de teste, e as mesmas não estão sendo removidas ao final de cada método de teste, conforme descrito em http://demoiselle.sourceforge.net/docs/components/behave/reference/lastversion/html/behave-scope.html

Para cada método ocorre o erro: O arquivo de história [/home/07257618658/workspace-siefpar/SiefPar/01-Sistema/06-Teste/testeautomatizado/target/test-classes/stories/intranet/cadastrarModalidade/cenariosComuns.story] foi adicionado 2 vezes, favor verificar.

@juliancesar
Copy link
Contributor

@ttperes, você pode nos dar uma ajuda nesta questão?

@ttperes
Copy link
Contributor

ttperes commented Dec 13, 2016

Bom dia!

Se legacyRunner = true
Histórias - context.addStories();
Histórias de reuso - context.addStoriesReuse();
Passos personalizados - context.addSteps().
Se você está usando assim, não está usando o método novo.

Se legacyRunner = false
Global - context.addStepsGlobal(), context.addStoriesGlobal(), context.addStoriesReuseGlobal();
Classes - context.addStepsClass(), context.addStoriesClass(), context.addStoriesReuseClass();
Método - context.addStepsMethod(), context.addStoriesMethod(), context.addStoriesReuseMethod().

Os métodos são diferentes propositalmente.

No caso de usar os métodos de um no padrão do outro, o behave jogará uma exceção nem iniciando os testes.

Existe um bug na versão do padrão antigo que foi um dos motivadores para justamente criar o novo modelo.

Este erro, foi contornado por mim e pelo Julian de forma a não impactar os demais testes legados. Para contornar esse problema, você deve dar um clearAllstories() (no runner) antes de cada run().

@juliancesar juliancesar added this to the 1.5.3 milestone Dec 14, 2016
@gabrielsilgon
Copy link

gabrielsilgon commented Dec 20, 2016

Olá pessoal,

o legacyRunner não tem seu valor explicitado no "behave.properties".
Ao definí-lo manualmente para 'true', vide comentário do @ttperes,

"Se legacyRunner = true
Histórias - context.addStories();
Histórias de reuso - context.addStoriesReuse();
Passos personalizados - context.addSteps().
Se você está usando assim, não está usando o método novo."

continuo sem conseguir executar meus testes. Comecei a ter este problema assim que atulizei para a versão 1.5.2.
Na verdade, ele executa o primeiro .story corretamente e lança uma exceção para cada um dos demais. Segue abaixo a saída no console:

13:49:10,688 ERROR (main) [BehaveContext]: Erro não esperado ao executar o Demoiselle Behave
br.gov.frameworkdemoiselle.behave.exception.BehaveException: O arquivo de história [/home//workspace-behave/Fibra-Calculo-AutoTeste/target/test-classes/stories/reuso/reusoEntradasCalcFormularioParcelamento.story] foi adicionado 2 vezes, favor verificar.

at br.gov.frameworkdemoiselle.behave.internal.parser.StoryFileConverter.convertReusedScenarios(StoryFileConverter.java:68)
at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:237)
at br.gov.frameworkdemoiselle.behave.controller.BehaveContext.run(BehaveContext.java:288)
at br.gov.serpro.demoisellebehave.Fibra_Calculo_AutoTeste.main.local.ConsolidacaoTestLocal.testarParametrosDeEntradaValidarUF(ConsolidacaoTestLocal.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
13:49:10,689 INFO (main) [BehaveContext]: --------------------------------
13:49:10,690 INFO (main) [BehaveContext]: Demoiselle Behave Finalizado
13:49:10,690 INFO (main) [BehaveContext]: --------------------------------

Vocês teriam alguma sugestão para contornar essa mudança de comportamento da versão 1.5.2?

Obrigado,
Gabriel Silva

@juliancesar
Copy link
Contributor

Por enquanto a recomendação é voltar para versão que funcionava corretamente pois iremos analisar esta situação assim que for possível.

Obrigado pela colaboração.

@juliancesar
Copy link
Contributor

retomando o assunto vou ainda esta semana para corrigir o problema em uma 1.5.3-SNAPSHOT e gerar a versão 1.5.3 FINAL o mais breve possível.

@juliancesar
Copy link
Contributor

O problema foi detectado no seguinte trecho de código que foi adicionado durante o desenvolvimento da versão 1.5.2, sendo que ele faz uma verificação de existência de cenários duplicados.

https://github.com/demoiselle/behave/blob/master/impl/core/src/main/java/br/gov/frameworkdemoiselle/behave/internal/parser/StoryConverter.java#L166

Ainda hoje será gerada uma versão 1.5.3-SNAPSHOT contendo a correção e para que funcione efetivamente será necessário informar a propriedade behave.parser.erroDuplicateScenarios como false no arquivo behave.properties.

@otmarjr, um detalhe importante que percebi em um dos comentário e acredito que seja pertinente citar.

o legacyRunner não tem seu valor explicitado no "behave.properties".

Os valores padrões das propriedades são explicitados via código Java no arquivo https://github.com/demoiselle/behave/blob/master/impl/core/src/main/java/br/gov/frameworkdemoiselle/behave/config/BehaveConfig.java e tentamos ao máximo deixar a documentação atualizada para corresponder com o código.

http://demoiselle.sourceforge.net/docs/components/behave/reference/lastversion/html/behave-configuracao.html

No exempo do legacyRunner a documentação esta:

behave.runner.legacyRunner : Habilita ou desabilita o modo de execução legado para retrocompatibilidade. O valor padrão é true.

e o Java esta:

// Ativa o uso da nova implementação que separa os .story por escopos ou mantém a maneira original sem escopos
public static boolean getRunner_legacyRunner() {
	return Boolean.parseBoolean(getProperty("behave.runner.legacyRunner", "true"));
}

@juliancesar
Copy link
Contributor

Senhores, for gerada uma versão 1.5.3-SNAPSHOT contendo a correção, favor testar.

Alterem o pom.xml para a versão citada e verifiquem se ao executar os testes a saída do console é igual ao texto a seguir:

INFO  (main) [BehaveContext]: --------------------------------
INFO  (main) [BehaveContext]: Demoiselle Behave Iniciado
INFO  (main) [BehaveContext]: Demoiselle Behave 1.5.3-SNAPSHOT em: 02/01/2017 16:14
INFO  (main) [BehaveContext]: --------------------------------

Para que funcione efetivamente será necessário informar a propriedade behave.parser.erroDuplicateScenarios como false no arquivo behave.properties.

@juliancesar
Copy link
Contributor

@gabrielsilgon e @otmarjr, algum retorno sobre a nova SNAPSHOT gerada com a correção do problema relatado?

Aguardo.

@otmarjr
Copy link
Author

otmarjr commented Mar 8, 2017

Acabei corrigindo com uma superclasse que limpa o context antes da execução de cada método de teste. Sigo na versão 1.5.2

@juliancesar
Copy link
Contributor

juliancesar commented Mar 13, 2017

@otmarjr, peço que faça o teste com a 1.5.3-SNAPSHOT e nos retorne o resultado para que possamos fechar esta issue, gerar a versão final com a correção e avisar o restante dos usuários.

Obrigado pela sua atenção e colaboração.

@otmarjr
Copy link
Author

otmarjr commented Mar 15, 2017

Executei um teste aqui e funcionou corretamente.

@juliancesar
Copy link
Contributor

Pretendo gerar a versão 1.5.3 FINAL ainda neste mês de abril contendo a correção, por isso vou deixar esta issue aberta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants