Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zapełnić bazę danych tylko raz przed metodami @Test w teście wiosennym?

Opierając się na odpowiedzi Alfredosa, jest to sposób na wstrzyknięcie informacji z bazy danych bez wywoływania domyślnego skryptu wbudowanej bazy danych. Na przykład może to być przydatne, gdy chcesz automagicznie zbudować DDL dla siebie - przynajmniej w testach.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContext.xml"})
public class TestClass {

    @Autowired
    private ApplicationContext ctx;

    private JdbcTemplate template;

    @Autowired
    public void setDataSource(DataSource dataSource) {
       template = new JdbcTemplate(dataSource);
    }

    private static boolean isInitialized = false;

    @Before
    public void runOnce() {
        if (isInitialized) return;
        System.out.println("Initializing database");

        String script = "classpath:script.sql"; 
        Resource resource = ctx.getResource(script);
        JdbcTestUtils.executeSqlScript(template, resource, true);            
        isInitialized = true;
    }
}

W ten sposób runOnce() Metoda jest wywoływana raz i tylko raz dla uruchomienia testowego. Jeśli zrobisz isInitialized pole instancji (niestatyczne), metoda zostanie wywołana przed każdym testem. W ten sposób możesz usunąć/ponownie wypełnić tabele, jeśli to konieczne, przed każdym uruchomieniem testu.

Zauważ, że jest to nadal dość szybkie i brudne rozwiązanie, a rozsądny sposób obsługi bazy danych jest zgodny z odpowiedzią Ralpha.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak łatwo stworzyć prosty CRUD przy użyciu PHP i MySQL

  2. Domyślna wartość poziomu Django DB dla kolumny

  3. Doctrine 2 DQL CASE GDY w Count

  4. Flask-Sqlalchemy Brakujący BEGIN wydaje się powodować brak synchronizacji sesji

  5. Znaleźć najbliższe dopasowanie do błędnie napisanych nazw miast?