Mamy niestandardowe źródło danych, które rozszerza BasicDataSource. Zastąpiliśmy metodę getConnection, która zawiera kilka rzeczy wewnątrz niej. Kiedy uruchamiamy aplikację webową poza testowaniem, gdy wywołujemy usługę z kontrolera, pobiera ona nowe połączenie i używa tego połączenia, dopóki usługa nie zostanie wykonana. Wszystko dobrze. Jednak w teście integracyjnym połączenie wydaje się być przechwytywane zanim test wywoła kontroler. Przepływ poniżejGrails Connections zachowuje się zupełnie inaczej w teście integracji
Regular Run: kontroler połączeń -> kontroler wywołuje metodę service -> połączenia chwycił -> Metoda serwis jest prowadzony i wraca do sterownika
test integracyjny: połączenia chwycił -> kontroler połączeń z testu -> metoda obsługi wywołań kontrolnych -> metoda serwisowa jest uruchamiana i wraca do kontrolera
Nie trzeba dodawać, że stwarza to problemy, ponieważ właściwe połączenie jest bardzo ważne dla naszej aplikacji. Myśli?
Edycja: Nadal występują istotne problemy z tym. Doszliśmy do punktu, w którym mamy do uniknięcia tworzenia testów integracyjnych, czy jakieś ręczne przełączanie połączenia (który pokonał pół punktu testów)
DataSource.groovy
dataSource {
pooled = true
dialect="org.hibernate.dialect.OracleDialect"
properties {
maxActive = 50
maxIdle = 10
initialSize = 10
minEvictableIdleTimeMillis = 1800000
timeBetweenEvictionRunsMillis = 1800000
maxWait = 10000
testWhileIdle = true
numTestsPerEvictionRun = 3
testOnBorrow = true
}
}
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = true
cache.provider_class = 'net.sf.ehcache.hibernate.EhCacheProvider'
}
czy wdrażasz ControllerUnitTestCase? lub po prostu UnitTestCase ?! –
ControllerUnitTestCase – Joseph
Czy mógłbyś opublikować swój plik DataSource.groovy? –