charlesbraw 27 de mar. de 2013
Sim, é possivel.
Crie o seu aquivo “applicationContext” para sua aplicação.
Crie o seu arquivo “test-applicationContext” para seus testes. (O nome não precisa ser esse).
Coloque seu arquivo de teste no classpath.
Dentro dele faça o import que você quer do seu hibernate (de teste).
E na classe do junit faça isso.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-applicationContext" })
public class MinhaClasseTest {}
Jedi_FeniX 27 de mar. de 2013
Valeu funcionou.
Agora estou com problema na hora que o DAO roda, segue o erro:
java . lang . UnsupportedOperationException : The user must supply a JDBC connection
at org . hibernate . connection . UserSuppliedConnectionProvider . getConnection ( UserSuppliedConnectionProvider . java : 54 )
at org . hibernate . jdbc . ConnectionManager . openConnection ( ConnectionManager . java : 446 )
at org . hibernate . jdbc . ConnectionManager . getConnection ( ConnectionManager . java : 167 )
at org . hibernate . jdbc . AbstractBatcher . prepareQueryStatement ( AbstractBatcher . java : 161 )
at org . hibernate . loader . Loader . prepareQueryStatement ( Loader . java : 1573 )
at org . hibernate . loader . Loader . doQuery ( Loader . java : 696 )
at org . hibernate . loader . Loader . doQueryAndInitializeNonLazyCollections ( Loader . java : 259 )
at org . hibernate . loader . Loader . doList ( Loader . java : 2228 )
at org . hibernate . loader . Loader . listIgnoreQueryCache ( Loader . java : 2125 )
at org . hibernate . loader . Loader . list ( Loader . java : 2120 )
at org . hibernate . loader . custom . CustomLoader . list ( CustomLoader . java : 312 )
at org . hibernate . impl . SessionImpl . listCustomQuery ( SessionImpl . java : 1722 )
at org . hibernate . impl . AbstractSessionImpl . list ( AbstractSessionImpl . java : 165 )
at org . hibernate . impl . SQLQueryImpl . list ( SQLQueryImpl . java : 175 )
at org . hibernate . ejb . QueryImpl . getSingleResult ( QueryImpl . java : 88 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 57 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 43 )
at java . lang . reflect . Method . invoke ( Method . java : 601 )
at org . springframework . orm . jpa . SharedEntityManagerCreator $ DeferredQueryInvocationHandler . invoke ( SharedEntityManagerCreator . java : 310 )
at $ Proxy22 . getSingleResult ( Unknown Source )
at br . com . test . dao . ClienteDAO . consultarTitularidadeDoClienteAPartirDoCpf ( ClienteDAO . java : 24 )
at br . com . test . endpoint . ClienteEndpoint . consultaDadosCadastrais ( ClienteEndpoint . java : 39 )
at br . com . test . endpoint . test . ClienteEndpoinTest . testarConsultarDadosCadastriasClienteTitular ( ClienteEndpoinTest . java : 47 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 57 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 43 )
at java . lang . reflect . Method . invoke ( Method . java : 601 )
at org . junit . runners . model . FrameworkMethod $ 1. runReflectiveCall ( FrameworkMethod . java : 47 )
at org . junit . internal . runners . model . ReflectiveCallable . run ( ReflectiveCallable . java : 12 )
at org . junit . runners . model . FrameworkMethod . invokeExplosively ( FrameworkMethod . java : 44 )
at org . junit . internal . runners . statements . InvokeMethod . evaluate ( InvokeMethod . java : 17 )
at org . springframework . test . context . junit4 . statements . RunBeforeTestMethodCallbacks . evaluate ( RunBeforeTestMethodCallbacks . java : 74 )
at org . springframework . test . context . junit4 . statements . RunAfterTestMethodCallbacks . evaluate ( RunAfterTestMethodCallbacks . java : 83 )
at org . springframework . test . context . junit4 . statements . SpringRepeat . evaluate ( SpringRepeat . java : 72 )
at org . springframework . test . context . junit4 . SpringJUnit4ClassRunner . runChild ( SpringJUnit4ClassRunner . java : 231 )
at org . junit . runners . BlockJUnit4ClassRunner . runChild ( BlockJUnit4ClassRunner . java : 50 )
at org . junit . runners . ParentRunner $ 3. run ( ParentRunner . java : 238 )
at org . junit . runners . ParentRunner $ 1. schedule ( ParentRunner . java : 63 )
at org . junit . runners . ParentRunner . runChildren ( ParentRunner . java : 236 )
at org . junit . runners . ParentRunner . access $ 000 ( ParentRunner . java : 53 )
at org . junit . runners . ParentRunner $ 2. evaluate ( ParentRunner . java : 229 )
at org . springframework . test . context . junit4 . statements . RunBeforeTestClassCallbacks . evaluate ( RunBeforeTestClassCallbacks . java : 61 )
at org . springframework . test . context . junit4 . statements . RunAfterTestClassCallbacks . evaluate ( RunAfterTestClassCallbacks . java : 71 )
at org . junit . runners . ParentRunner . run ( ParentRunner . java : 309 )
at org . springframework . test . context . junit4 . SpringJUnit4ClassRunner . run ( SpringJUnit4ClassRunner . java : 174 )
at org . apache . maven . surefire . junit4 . JUnit4TestSet . execute ( JUnit4TestSet . java : 53 )
at org . apache . maven . surefire . junit4 . JUnit4Provider . executeTestSet ( JUnit4Provider . java : 123 )
at org . apache . maven . surefire . junit4 . JUnit4Provider . invoke ( JUnit4Provider . java : 104 )
at sun . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method )
at sun . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 57 )
at sun . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 43 )
at java . lang . reflect . Method . invoke ( Method . java : 601 )
at org . apache . maven . surefire . util . ReflectionUtils . invokeMethodWithArray ( ReflectionUtils . java : 164 )
at org . apache . maven . surefire . booter . ProviderFactory $ ProviderProxy . invoke ( ProviderFactory . java : 110 )
at org . apache . maven . surefire . booter . SurefireStarter . invokeProvider ( SurefireStarter . java : 175 )
at org . apache . maven . surefire . booter . SurefireStarter . runSuitesInProcessWhenForked ( SurefireStarter . java : 107 )
at org . apache . maven . surefire . booter . ForkedBooter . main ( ForkedBooter . java : 68 )
O meu persistence está assim:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version= "1.0" xmlns= "http://java.sun.com/xml/ns/persistence" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" >
<persistence-unit name= "CentralAtendimentoMosaicoTestPU" transaction-type= "RESOURCE_LOCAL" >
<provider> org.hibernate.ejb.HibernatePersistence</provider>
<class> br.com.test.model.Cliente</class>
<class> br.com.test.model.TipoPortador</class>
<exclude-unlisted-classes> true</exclude-unlisted-classes>
<properties>
<property name= "javax.persistence.jdbc.driver" value= "org.hsqldb.jdbcDriver" />
<property name= "javax.persistence.jdbc.url" value= "jdbc:hsqldb:mem:." />
<property name= "javax.persistence.jdbc.user" value= "sa" />
<property name= "javax.persistence.jdbc.password" value= "" />
<property name= "hibernate.show_sql" value= "true" />
<property name= "hibernate.dialect" value= "org.hibernate.dialect.HSQLDialect" />
<property name= "hibernate.connection.shutdown" value= "true" />
<property name= "hibernate.hbm2ddl.auto" value= "create-drop" />
</properties>
</persistence-unit>
</persistence>
O estranho que quando faço o deploy da aplicação tudo roda normalmente. A única diferença é que no contexto de teste eu estou querendo usar o HSQLDB e por isso estou usando um outro persistence.xml (que está acima).
charlesbraw 27 de mar. de 2013
Onde está as tags do “javax.persistence”
troque por
<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.url" value="jdbc:hsqldb:mem:." />
Jedi_FeniX 27 de mar. de 2013
Opa, valeu pela ajuda. Funcionou!
Jedi_FeniX 27 de mar. de 2013
Agora uma outra dúvida, que me surgiu agora, com o HSQLDB eu jogo o banco na memória, mas toda a estrutura deve estar lá, como tabelas, triggers e etc, existem alguma maneira de toda vez que o teste for inicializado essa estrutura “subir” para a memória?
charlesbraw 27 de mar. de 2013
Que bom que funcionou.
Não sei te responder, mas imagino que sim, deve ter jeito de criar um script e o banco ler ao iniciar.
Se você gostaria de já ter as cargas para seus testes (como select etc.) talvez uma opção seja o "dbunit"
Com ele você consegue trabalhar com cargas.
Mas pode ser que exista algo melhor, vou ficar te devendo essa hehehe.
flws.