One off configuration for a @SpringBootTest
up vote
2
down vote
favorite
How can I bootstrap my Spring Boot 2 integration tests so that across all of them I can have one set of configurations which pre-seeds the test database with some test data that can be used across all integration tests?
java spring-boot integration-testing
add a comment |
up vote
2
down vote
favorite
How can I bootstrap my Spring Boot 2 integration tests so that across all of them I can have one set of configurations which pre-seeds the test database with some test data that can be used across all integration tests?
java spring-boot integration-testing
add a comment |
up vote
2
down vote
favorite
up vote
2
down vote
favorite
How can I bootstrap my Spring Boot 2 integration tests so that across all of them I can have one set of configurations which pre-seeds the test database with some test data that can be used across all integration tests?
java spring-boot integration-testing
How can I bootstrap my Spring Boot 2 integration tests so that across all of them I can have one set of configurations which pre-seeds the test database with some test data that can be used across all integration tests?
java spring-boot integration-testing
java spring-boot integration-testing
asked Nov 18 at 21:41
n00b
1,45822746
1,45822746
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
3
down vote
accepted
Supposing you are using h2 test database.
My src/test/resources/application.properties file has:
spring.jpa.hibernate.ddl-auto=create-drop
You'll need a configuration file with the following structure. (This is a configuration example located inside the folder src/test/java):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
The file 'load_database.sql': (the full path is /src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
If you are using mapped entities(with @Entity) ( with create-drop) you won't need the 'CREATE TABLE' part for that.
And now, all your integration tests have the script data inserted
Edit: ( My test structure) I've created at github my example application. Please see the test structure and run the tests:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
Github: https://github.com/thiagochagas/insert-data-tests
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the@PostConstruct
method is being invoked twice. Is this expected?
– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the@ActiveProfile
and@Profile
annotations
– n00b
Nov 23 at 4:31
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
Supposing you are using h2 test database.
My src/test/resources/application.properties file has:
spring.jpa.hibernate.ddl-auto=create-drop
You'll need a configuration file with the following structure. (This is a configuration example located inside the folder src/test/java):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
The file 'load_database.sql': (the full path is /src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
If you are using mapped entities(with @Entity) ( with create-drop) you won't need the 'CREATE TABLE' part for that.
And now, all your integration tests have the script data inserted
Edit: ( My test structure) I've created at github my example application. Please see the test structure and run the tests:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
Github: https://github.com/thiagochagas/insert-data-tests
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the@PostConstruct
method is being invoked twice. Is this expected?
– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the@ActiveProfile
and@Profile
annotations
– n00b
Nov 23 at 4:31
add a comment |
up vote
3
down vote
accepted
Supposing you are using h2 test database.
My src/test/resources/application.properties file has:
spring.jpa.hibernate.ddl-auto=create-drop
You'll need a configuration file with the following structure. (This is a configuration example located inside the folder src/test/java):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
The file 'load_database.sql': (the full path is /src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
If you are using mapped entities(with @Entity) ( with create-drop) you won't need the 'CREATE TABLE' part for that.
And now, all your integration tests have the script data inserted
Edit: ( My test structure) I've created at github my example application. Please see the test structure and run the tests:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
Github: https://github.com/thiagochagas/insert-data-tests
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the@PostConstruct
method is being invoked twice. Is this expected?
– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the@ActiveProfile
and@Profile
annotations
– n00b
Nov 23 at 4:31
add a comment |
up vote
3
down vote
accepted
up vote
3
down vote
accepted
Supposing you are using h2 test database.
My src/test/resources/application.properties file has:
spring.jpa.hibernate.ddl-auto=create-drop
You'll need a configuration file with the following structure. (This is a configuration example located inside the folder src/test/java):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
The file 'load_database.sql': (the full path is /src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
If you are using mapped entities(with @Entity) ( with create-drop) you won't need the 'CREATE TABLE' part for that.
And now, all your integration tests have the script data inserted
Edit: ( My test structure) I've created at github my example application. Please see the test structure and run the tests:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
Github: https://github.com/thiagochagas/insert-data-tests
Supposing you are using h2 test database.
My src/test/resources/application.properties file has:
spring.jpa.hibernate.ddl-auto=create-drop
You'll need a configuration file with the following structure. (This is a configuration example located inside the folder src/test/java):
@Profile("test")
@Configuration
public class H2Config {
@Autowired
private DataSource datasource;
@PostConstruct
public void loadSQL() throws Exception {
ScriptUtils.executeSqlScript(datasource.getConnection(), new ClassPathResource("/sql/load_database.sql"));
}
}
The file 'load_database.sql': (the full path is /src/test/resources/sql/load_database.sql)
CREATE OR REPLACE TABLE OPER_DISPN(
ID NUMBER NOT NULL,
DT_VCTO_OPER DATE NOT NULL
);
INSERT INTO OPER_DISPN(ID,DT_VCTO_OPER) VALUES (1,TO_DATE('2018/09/21', 'yyyy/mm/dd'));
If you are using mapped entities(with @Entity) ( with create-drop) you won't need the 'CREATE TABLE' part for that.
And now, all your integration tests have the script data inserted
Edit: ( My test structure) I've created at github my example application. Please see the test structure and run the tests:
TNotMappedRepository.testLoadDataFind()
PersonRepository.testLoadDataFind()
Github: https://github.com/thiagochagas/insert-data-tests
edited Nov 21 at 19:35
answered Nov 18 at 22:22
Thiago Chagas
1889
1889
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the@PostConstruct
method is being invoked twice. Is this expected?
– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the@ActiveProfile
and@Profile
annotations
– n00b
Nov 23 at 4:31
add a comment |
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the@PostConstruct
method is being invoked twice. Is this expected?
– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the@ActiveProfile
and@Profile
annotations
– n00b
Nov 23 at 4:31
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the
@PostConstruct
method is being invoked twice. Is this expected?– n00b
Nov 19 at 20:52
Thanks for the suggestion @ThiagoChagas. Is this leveraging Spring's DI framework? I gave it a go but I'm seeing that the Configuration class and the
@PostConstruct
method is being invoked twice. Is this expected?– n00b
Nov 19 at 20:52
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
No, this isn't the expected. I tested with my application however it passes only one time. I will add more information about my test structure.
– Thiago Chagas
Nov 19 at 23:23
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
@n00b I have seen that if your script has errors It will run twice (the Configuration part). Is there any error log?
– Thiago Chagas
Nov 21 at 19:40
Thanks for the repo link. I was missing the
@ActiveProfile
and @Profile
annotations– n00b
Nov 23 at 4:31
Thanks for the repo link. I was missing the
@ActiveProfile
and @Profile
annotations– n00b
Nov 23 at 4:31
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53365734%2fone-off-configuration-for-a-springboottest%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown