Nasza aplikacja internetowa korzysta SystemPropertyPlaceholder załadować pliki własności w zależności od wartości nieruchomości systemowej (patrz poniżej)Set system własności do JUnit androidów (Eclipse), aby przetestować wiosna Web App
Domyślna konfiguracja dla uruchomiony lokalnie jest przechowywany w application.properties
. Na serwerze produkcyjnym właśnie ustawiamy "env" na "production" przed wdrożeniem aplikacji i załaduje ona production.properties
.
Teraz do testowania aplikacji należy użyć pliku test.properties
.
Jeśli przeprowadzę wszystkie testy w naszej kompilacji Jenkins, dodanie -Denv=test
będzie działać zgodnie z oczekiwaniami. Ale co, jeśli po prostu chcę uruchomić jeden test w Eclipse ze zintegrowanym biegaczem JUnit?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = WebContextLoader.class, locations = {"classpath:application-context.xml" })
public class SomeTest {
Czy istnieje jakiś sposób, aby powiedzieć mój test należy ustawić właściwości systemu „env” na „test” przed wiosną jest ładowany w górę? Ponieważ za pomocą MethodInvokingFactoryBean
będzie tylko ustawić go potem z jakiegoś powodu, nawet jeśli ustawić go przed załadowaniem moje pliki własności:
<bean id="systemPrereqs"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<!-- The new Properties -->
<util:properties>
<prop key="env">test</prop>
</util:properties>
</property>
</bean>
<bean
class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="searchContextAttributes" value="true" />
<property name="contextOverride" value="true" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:application.properties</value>
<value>classpath:${env}.properties</value>
<value>${config}</value>
</list>
</property>
</bean>
<bean id="managerDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username">
<value>${database.username}</value>
</property>
<property name="password">
<value>${database.password}</value>
</property>
<property name="url">
<value>${database.url}</value>
</property>
</bean>
z właściwości bazy danych zdefiniowanych wewnątrz application.properties, production.properties i test.properties.
Chodzi o to, oczywiście, że chcę użyć tego samego pliku kontekstowego dla wszystkich środowisk, w przeciwnym razie mógłbym tylko powiedzieć, że mój test użył innego kontekstu, w którym ustawiłem właściwość PropertyPlaceholder "location" na test.properties .. Chcę jednak, aby moje testy obejmowały także mój kontekst, aby wszelkie błędy zostały wykryte tak wcześnie, jak to tylko możliwe (przeprowadzam kompleksowe testy naszej aplikacji internetowej za pomocą narzędzia spring-web-mvc, które ładuje całą aplikację internetową, miłe opinie i nie chcę tego stracić).
Do tej pory jedynym sposobem widzę może być skonfigurowanie runner JUnit zawierać pewną właściwość systemu ustalania argumentu, choć nie wiem, jak to zrobić ..
powiedziałbym profile stosowany w tych profilach importować właściwa pliki, których potrzebujesz. Wygląda na to, że wymyślasz koło. Z profilem możesz po prostu dodać "@ ActiveProfiles" do swojego testu, aby załadować właściwe rzeczy. Zamiast "-Denv = test" użyjesz '-Dspring.active.profiles = test' –