2010-05-04 1 views
2

튜토리얼과 예제 응용 프로그램 즉, 5 일간의 Wicket을 수행했습니다 - 테스트 작성 : http://www.mysticcoders.com/blog/2009/03/10/5-days-of-wicket-writing-the-tests/Wicket, Spring, Hibernate - Unitils로 테스트하기 - 오류 : 테이블을 찾지 못했습니다 [pg_class의 이름을 선택하십시오]

메시지를 데이터베이스에 저장하는 간단한 shoutbox를 사용하여 자체 프로젝트를 설정했습니다. 그런 다음 메시지가 데이터베이스에 저장되어있는 경우 검색된 개체에 똑같은 데이터가 포함되는지 확인하는 몇 가지 테스트를 설정하려고했습니다.

mvn 테스트 실행시 모든 테스트가 실패합니다. 예외는 아래의 첫 번째 코드 상자에 붙여 넣어졌습니다. 나는 내 unitils.properties가 'hdqldb'- dialect를 사용한다고 말했지만이 메시지는 테스트를 시작할 때 콘솔 창에 여전히 출력됩니다 : INFO - Dialect - dialect 사용 : org.hibernate.dialect.PostgreSQLDialect. 이 글의 맨 아래에 콘솔에서 전체 덤프를 추가했습니다 (몇 마일이나 계속됩니다 :-)). MVN의 내 모든 테스트가 실패 테스트 및 예외를 실행하면

입니다 : 내가 설정 한

 
Caused by: java.sql.SQLException: Table not found in statement [select relname from pg_class] 
at org.hsqldb.jdbc.Util.sqlException(Unknown Source) 
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source) 
at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source) 
at org.apache.commons.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:188) 
at org.hibernate.tool.hbm2ddl.DatabaseMetadata.initSequences(DatabaseMetadata.java:151) 
at org.hibernate.tool.hbm2ddl.DatabaseMetadata.(DatabaseMetadata.java:69) 
at org.hibernate.tool.hbm2ddl.DatabaseMetadata.(DatabaseMetadata.java:62) 
at org.springframework.orm.hibernate3.LocalSessionFactoryBean$3.doInHibernate(LocalSessionFactoryBean.java:958) 
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419) 
... 49 more

내 unitils.properties 그렇게 같은 파일 :

 
database.driverClassName=org.hsqldb.jdbcDriver 

database.url=jdbc:hsqldb:mem:PUBLIC 
database.userName=sa 
database.password= 

database.dialect=hsqldb 

database.schemaNames=PUBLIC

내 추상적 인 IntegrationTest을 클래스 :

 
@SpringApplicationContext({"/com/upbeat/shoutbox/spring/applicationContext.xml", "applicationContext-test.xml"}) 
public abstract class AbstractIntegrationTest extends UnitilsJUnit4 { 
private ApplicationContext applicationContext; 
} 

applicationContext-test.x ml의 :

 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xsi:schemaLocation=" 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 
    <bean id="dataSource" class="org.unitils.database.UnitilsDataSourceFactoryBean"/> 
</beans> 

그리고 마지막으로, 테스트 클래스 중 하나를 어떤 도움을 주시면 더 좋구요

 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building shoutbox 
[INFO] task-segment: [test] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [resources:resources {execution: default-resources}] 
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! 
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] Copying 3 resources 
[INFO] Copying 4 resources 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [resources:testResources {execution: default-testResources}] 
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent! 
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! 
[INFO] Copying 2 resources 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [surefire:test {execution: default-test}] 
[INFO] Surefire report directory: F:\Projects\shoutbox\target\surefire-reports 
INFO - ConfigurationLoader  - Loaded main configuration file unitils-default.properties from classpath. 
INFO - ConfigurationLoader  - Loaded custom configuration file unitils.properties from classpath. 
INFO - ConfigurationLoader  - No local configuration file unitils-local.properties found. 

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running com.upbeat.shoutbox.web.TestViewShoutsPage 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.02 sec 
INFO - Version     - Hibernate Annotations 3.4.0.GA 
INFO - Environment    - Hibernate 3.3.0.SP1 
INFO - Environment    - hibernate.properties not found 
INFO - Environment    - Bytecode provider name : javassist 
INFO - Environment    - using JDK 1.4 java.sql.Timestamp handling 
INFO - Version     - Hibernate Commons Annotations 3.1.0.GA 
INFO - AnnotationBinder   - Binding entity from annotated class: com.upbeat.shoutbox.models.ShoutItem 
INFO - QueryBinder    - Binding Named query: item.getById => from ShoutItem item where item.id = :id 
INFO - QueryBinder    - Binding Named query: item.find => from ShoutItem item order by item.timestamp desc 
INFO - QueryBinder    - Binding Named query: item.count => select count(item) from ShoutItem item 
INFO - EntityBinder    - Bind entity com.upbeat.shoutbox.models.ShoutItem on table SHOUT_ITEMS 
INFO - AnnotationConfiguration - Hibernate Validator not found: ignoring 
INFO - notationSessionFactoryBean - Building new Hibernate SessionFactory 
INFO - earchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled. 
INFO - ConnectionProviderFactory - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider 
INFO - SettingsFactory   - RDBMS: HSQL Database Engine, version: 1.8.0 
INFO - SettingsFactory   - JDBC driver: HSQL Database Engine Driver, version: 1.8.0 
INFO - Dialect     - Using dialect: org.hibernate.dialect.PostgreSQLDialect 
INFO - TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory 
INFO - actionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended) 
INFO - SettingsFactory   - Automatic flush during beforeCompletion(): disabled 
INFO - SettingsFactory   - Automatic session close at end of transaction: disabled 
INFO - SettingsFactory   - JDBC batch size: 1000 
INFO - SettingsFactory   - JDBC batch updates for versioned data: disabled 
INFO - SettingsFactory   - Scrollable result sets: enabled 
INFO - SettingsFactory   - JDBC3 getGeneratedKeys(): disabled 
INFO - SettingsFactory   - Connection release mode: auto 
INFO - SettingsFactory   - Default batch fetch size: 1 
INFO - SettingsFactory   - Generate SQL with comments: disabled 
INFO - SettingsFactory   - Order SQL updates by primary key: disabled 
INFO - SettingsFactory   - Order SQL inserts for batching: disabled 
INFO - SettingsFactory   - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 
INFO - ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory 
INFO - SettingsFactory   - Query language substitutions: {} 
INFO - SettingsFactory   - JPA-QL strict compliance: disabled 
INFO - SettingsFactory   - Second-level cache: enabled 
INFO - SettingsFactory   - Query cache: enabled 
INFO - SettingsFactory   - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge 
INFO - FactoryCacheProviderBridge - Cache provider: org.hibernate.cache.HashtableCacheProvider 
INFO - SettingsFactory   - Optimize cache for minimal puts: disabled 
INFO - SettingsFactory   - Structured second-level cache entries: disabled 
INFO - SettingsFactory   - Query cache factory: org.hibernate.cache.StandardQueryCacheFactory 
INFO - SettingsFactory   - Echoing all SQL to stdout 
INFO - SettingsFactory   - Statistics: disabled 
INFO - SettingsFactory   - Deleted entity synthetic identifier rollback: disabled 
INFO - SettingsFactory   - Default entity-mode: pojo 
INFO - SettingsFactory   - Named query checking : enabled 
INFO - SessionFactoryImpl   - building session factory 
INFO - essionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured 
INFO - UpdateTimestampsCache  - starting update timestamps cache at region: org.hibernate.cache.UpdateTimestampsCache 
INFO - StandardQueryCache   - starting query cache at region: org.hibernate.cache.StandardQueryCache 
INFO - notationSessionFactoryBean - Updating database schema for Hibernate SessionFactory 
INFO - Dialect     - Using dialect: org.hibernate.dialect.PostgreSQLDialect 
INFO - XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml] 
INFO - SQLErrorCodesFactory  - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase] 
INFO - DefaultListableBeanFactory - Destroying singletons in org.s[email protected]3e0ebb: defining beans [propertyConfigurer,dataSource,sessionFactory,shoutService,shoutItemDao,wicketApplication,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,transactionManager]; root of factory hierarchy 
INFO - sPathXmlApplicationContext - Refreshing org[email protected]a8e586: display name [org[email protected]a8e586]; startup date [Tue May 04 18:19:58 CEST 2010]; root of context hierarchy 
INFO - XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [com/upbeat/shoutbox/spring/applicationContext.xml] 
INFO - XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [applicationContext-test.xml] 
INFO - DefaultListableBeanFactory - Overriding bean definition for bean 'dataSource': replacing [Generic bean: class [org.apache.commons.dbcp.BasicDataSource]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=close; defined in class path resource [com/upbeat/shoutbox/spring/applicationContext.xml]] with [Generic bean: class [org.unitils.database.UnitilsDataSourceFactoryBean]; scope=singleton; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [applicationContext-test.xml]] 
INFO - sPathXmlApplicationContext - Bean factory for application context [org[email protected]a8e586]: org.s[email protected]5dfaf1 
INFO - pertyPlaceholderConfigurer - Loading properties file from class path resource [application.properties] 
INFO - DefaultListableBeanFactory - Pre-instantiating singletons in org.s[email protected]5dfaf1: defining beans [propertyConfigurer,dataSource,sessionFactory,shoutService,shoutItemDao,wicketApplication,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,transactionManager]; root of factory hierarchy 
INFO - AnnotationBinder   - Binding entity from annotated class: com.upbeat.shoutbox.models.ShoutItem 
INFO - QueryBinder    - Binding Named query: item.getById => from ShoutItem item where item.id = :id 
INFO - QueryBinder    - Binding Named query: item.find => from ShoutItem item order by item.timestamp desc 
INFO - QueryBinder    - Binding Named query: item.count => select count(item) from ShoutItem item 
INFO - EntityBinder    - Bind entity com.upbeat.shoutbox.models.ShoutItem on table SHOUT_ITEMS 
INFO - AnnotationConfiguration - Hibernate Validator not found: ignoring 
INFO - notationSessionFactoryBean - Building new Hibernate SessionFactory 
INFO - earchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled. 
INFO - ConnectionProviderFactory - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider 
INFO - SettingsFactory   - RDBMS: HSQL Database Engine, version: 1.8.0 
INFO - SettingsFactory   - JDBC driver: HSQL Database Engine Driver, version: 1.8.0 
INFO - Dialect     - Using dialect: org.hibernate.dialect.PostgreSQLDialect 
INFO - TransactionFactoryFactory - Transaction strategy: org.springframework.orm.hibernate3.SpringTransactionFactory 
INFO - actionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended) 
INFO - SettingsFactory   - Automatic flush during beforeCompletion(): disabled 
INFO - SettingsFactory   - Automatic session close at end of transaction: disabled 
INFO - SettingsFactory   - JDBC batch size: 1000 
INFO - SettingsFactory   - JDBC batch updates for versioned data: disabled 
INFO - SettingsFactory   - Scrollable result sets: enabled 
INFO - SettingsFactory   - JDBC3 getGeneratedKeys(): disabled 
INFO - SettingsFactory   - Connection release mode: auto 
INFO - SettingsFactory   - Default batch fetch size: 1 
INFO - SettingsFactory   - Generate SQL with comments: disabled 
INFO - SettingsFactory   - Order SQL updates by primary key: disabled 
INFO - SettingsFactory   - Order SQL inserts for batching: disabled 
INFO - SettingsFactory   - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory 
INFO - ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory 
INFO - SettingsFactory   - Query language substitutions: {} 
INFO - SettingsFactory   - JPA-QL strict compliance: disabled 
INFO - SettingsFactory   - Second-level cache: enabled 
INFO - SettingsFactory   - Query cache: enabled 
INFO - SettingsFactory   - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge 
INFO - FactoryCacheProviderBridge - Cache provider: org.hibernate.cache.HashtableCacheProvider 
INFO - SettingsFactory   - Optimize cache for minimal puts: disabled 
INFO - SettingsFactory   - Structured second-level cache entries: disabled 
INFO - SettingsFactory   - Query cache factory: org.hibernate.cache.StandardQueryCacheFactory 
INFO - SettingsFactory   - Echoing all SQL to stdout 
INFO - SettingsFactory   - Statistics: disabled 
INFO - SettingsFactory   - Deleted entity synthetic identifier rollback: disabled 
INFO - SettingsFactory   - Default entity-mode: pojo 
INFO - SettingsFactory   - Named query checking : enabled 
INFO - SessionFactoryImpl   - building session factory 
INFO - essionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured 
INFO - UpdateTimestampsCache  - starting update timestamps cache at region: org.hibernate.cache.UpdateTimestampsCache 
INFO - StandardQueryCache   - starting query cache at region: org.hibernate.cache.StandardQueryCache 
INFO - notationSessionFactoryBean - Updating database schema for Hibernate SessionFactory 
INFO - Dialect     - Using dialect: org.hibernate.dialect.PostgreSQLDialect 
INFO - DefaultListableBeanFactory - Destroying singletons in org.s[email protected]5dfaf1: defining beans [propertyConfigurer,dataSource,sessionFactory,shoutService,shoutItemDao,wicketApplication,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,transactionManager]; root of factory hierarchy 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.34 sec <<< FAILURE! 
Running com.upbeat.shoutbox.integrations.ShoutItemIntegrationTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec <<< FAILURE! 
Running com.upbeat.shoutbox.mocks.ShoutServiceTest 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.01 sec <<< FAILURE! 

Results : 

Tests in error: 
    initializationError(com.upbeat.shoutbox.web.TestViewShoutsPage) 
    testRenderMyPage(com.upbeat.shoutbox.web.TestHomePage) 
    initializationError(com.upbeat.shoutbox.integrations.ShoutItemIntegrationTest) 
    initializationError(com.upbeat.shoutbox.mocks.ShoutServiceTest) 

Tests run: 4, Failures: 0, Errors: 4, Skipped: 0 

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] There are test failures. 

Please refer to F:\Projects\shoutbox\target\surefire-reports for the individual test results. 
[INFO] ------------------------------------------------------------------------ 
[INFO] For more information, run Maven with the -e switch 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3 seconds 
[INFO] Finished at: Tue May 04 18:19:58 CEST 2010 
[INFO] Final Memory: 13M/31M 
[INFO] ------------------------------------------------------------------------ 

: 콘솔에서

 
package com.upbeat.shoutbox.web; 

import org.apache.wicket.spring.injection.annot.test.AnnotApplicationContextMock; 
import org.apache.wicket.util.tester.WicketTester; 
import org.junit.Before; 
import org.junit.Test; 
import org.unitils.spring.annotation.SpringBeanByType; 

import com.upbeat.shoutbox.HomePage; 
import com.upbeat.shoutbox.integrations.AbstractIntegrationTest; 
import com.upbeat.shoutbox.persistence.ShoutItemDao; 
import com.upbeat.shoutbox.services.ShoutService; 

public class TestHomePage extends AbstractIntegrationTest 
{ 
@SpringBeanByType 
private ShoutService svc; 

@SpringBeanByType 
private ShoutItemDao dao; 

protected WicketTester tester; 

@Before 
public void setUp() 
{ 
    AnnotApplicationContextMock appctx = new AnnotApplicationContextMock(); 

    appctx.putBean("shoutItemDao", dao); 
    appctx.putBean("shoutService", svc); 
    tester = new WicketTester(); 
} 

@Test 
public void testRenderMyPage() 
{ 
    //start and render the test page 
    tester.startPage(HomePage.class); 

    //assert rendered page class 
    tester.assertRenderedPage(HomePage.class); 

    //assert rendered label component 
    tester.assertLabel("message", "If you see this message wicket is properly configured and running"); 
} 
} 

덤프가 MVN 테스트를 실행. 당신이에 대한 통합 테스트를 실행하려면, 그래서

<prop key="hibernate.dialect">${hibernate.dialect}</prop> 

:

답변

2

applicationContext-test.xml가 Unitils 데이터 소스를 공급하는 기본 데이터 소스를 오버라이드 (override)하는 동안은 applicationContext.xml은 여전히 ​​(즉 Maven을 필터링하는 동안 대체됩니다) 다음의 속성을 선언한다

hibernate.dialect=org.hibernate.dialect.HSQLDialect 
: HSQLDB 데이터베이스 (Unitils 그렇게하도록 구성 할 것), 나의 이해는 당신이 LOCAL 프로필을 사용하는 경우 트리거 선언 된 필터 filters-LOCAL.properties를 사용하기로되어 있다는 것입니다

target/classes/applicationContext.xml을 확인하여 확인할 수는 있지만 위 값을 얻지 못하고 있다는 것이 분명하지만 입니다.그것은 단지 작동해야

<profile> 
    <id>LOCAL</id> 
    <activation> 
    <activeByDefault>true</activeByDefault> 
    </activation> 
    <properties> 
    <env>LOCAL</env> 
    </properties> 
</profile> 

:

홀수 부분 mysticpaste의 pom.xmlactiveByDefaultLOCAL 프로필 (프로젝트 저장소 적어도 버전)을 선언하는 것이된다. 질문은 다음과 같습니다.

  • 무엇이 mvn help:active-profiles입니까?
  • 이 LOCAL 프로필 (및 LOCAL 필터)을 보유하고 있습니까?
  • pom.xml의 최신 버전을 갖고 있습니까?
+0

mysticpaste가 사용중인 필터를 제거 했으므로 사용하지 않았습니다. 나는 필터를 사용하지 말 것을 제안했던 이전의 질문을 토대로 이것을했다. 이 필터 대신에 하나의 application.properties 파일 ("hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect"포함)을 사용하고 있습니다. 적절한 HSQLDialect 세트로 제안한대로 로컬 필터를 만듭니다 :-) – John

+1

여기에서받은 제안은 단지 의견 일뿐입니다. 모든 의견을 반영하지는 않습니다. 개인적으로 표현한 견해를 공유합니다. [이 코멘트] (http://www.mysticcoders.com/blog/2009/03/09/5-days-of-wicket-day-1/#comment-1313)의이 Wicket 시리즈의 저자에 의해 PropertyPlaceholderConfigurer'를 통해 프로파일. –

+0

원래 문제의 도움과 프로필 사용에 대한 참고로 Pascal에게 감사드립니다. 적절한 방언으로 프로필을 만드는 제안은 트릭을 완료 한 것으로 보입니다! – John