sql >> データベース >  >> RDS >> Mysql

春のテストで@Testメソッドの前に一度だけデータベースにデータを入力する方法は?

    Alfredosの回答に基づいて、これは組み込みデータベースのデフォルトスクリプトを呼び出さずにデータベース情報を挿入する方法です。たとえば、これは、少なくともテストでは、自動的にDDLを構築する場合に役立ちます。

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

    このように、runOnce() メソッドは、テスト実行のために1回だけ呼び出されます。 isInitializedを作成した場合 インスタンスフィールド(非静的)の場合、メソッドはすべてのテストの前に呼び出されます。このようにして、すべてのテストを実行する前に、必要に応じてテーブルを削除/再設定できます。

    これはまだかなり迅速で汚い解決策であり、データベースを処理するための賢明な方法はラルフの答えに従っていることに注意してください。



    1. ExcelからSQLServer2008にインポートするときにデータ型を変換中にエラーが発生しました

    2. PostgreSQLでのRandom()のしくみ

    3. Java SQLData-リスト/配列を使用してユーザーオブジェクトにキャストしますか?

    4. 2022年に練習しなければならないSQLクエリインタビューの質問トップ30