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?










share|improve this question


























    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?










    share|improve this question
























      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?










      share|improve this question













      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






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 18 at 21:41









      n00b

      1,45822746




      1,45822746
























          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






          share|improve this answer























          • 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











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          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

























          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






          share|improve this answer























          • 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















          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






          share|improve this answer























          • 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













          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






          share|improve this answer














          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







          share|improve this answer














          share|improve this answer



          share|improve this answer








          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


















          • 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


















          draft saved

          draft discarded




















































          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.




          draft saved


          draft discarded














          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





















































          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







          Popular posts from this blog

          Wiesbaden

          Marschland

          Dieringhausen