Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm cách nào để điền cơ sở dữ liệu chỉ một lần trước các phương thức @Test trong thử nghiệm mùa xuân?

Dựa trên câu trả lời của Alfredos, đây là một cách để đưa thông tin cơ sở dữ liệu vào mà không cần gọi tập lệnh mặc định của cơ sở dữ liệu nhúng. Ví dụ, điều này có thể hữu ích khi bạn muốn tự động xây dựng DDL cho mình - ít nhất là trong các thử nghiệm.

@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;
    }
}

Bằng cách này, runOnce() phương thức được gọi một lần và chỉ một lần cho quá trình chạy thử nghiệm. Nếu bạn thực hiện isInitialized một trường thể hiện (không tĩnh), phương thức sẽ được gọi trước mỗi lần kiểm tra. Bằng cách này, bạn có thể thả / tái tạo lại các bảng, nếu cần, trước mỗi lần chạy thử nghiệm.

Lưu ý rằng đây vẫn là một giải pháp khá nhanh và khó xử lý và cách hợp lý để xử lý cơ sở dữ liệu phù hợp với câu trả lời của Ralph.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trang web đa ngôn ngữ thực hành tốt nhất

  2. Cách thay đổi giá trị mặc định của một cột bằng thủ tục

  3. Làm cách nào để thực hiện THAM GIA NGOÀI TRỜI ĐẦY ĐỦ trong MySQL?

  4. tạo cột văn bản làm khóa duy nhất

  5. Bạn của một người bạn trong PHP / MySQL?