テスト.


スプリングテストの適用


より多くの空白と複雑な状況が発生した場合、ApplicationContextの作成に多くの時間がかかる場合があります.ApplicationContextの作成時にすべての単色空調整オブジェクトを初期化するには、時間がかかります.
この問題を解決するには、ApplicationContextを静的レベルに保存できますが、Springで提供されるApplicationContextテストサポートを使用すると便利です.

アプリケーションコンテキストを管理してテスト


スプリングテストコンテキストフレームの適用

@Runwith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="/applicationContext.xml")
public class UserDaoTest {
	@Autowired
    private ApplicationContext context;
    
    @Before
    public void setUp() {
    	this.dao = this.context.getBean("userDao", UserDao.class);
    }
}
contextを初期化するコードがないため、メソッドでcontextを使用するとNullPointerExceptionが生成されますが、テストでは問題は発生しません.
ここでより簡単なのは、ユーザデータを注入して使用することもできる.
public class UserDaoTest {
	@Autowired
    UserDao dao;
}

DIとテスト


DataSourceの実装クラスを変更せず、DB接続の情報も変更しない場合は、インタフェースを使用してDIを注入する必要がありますか?
(毎日悩む部分…)
  • ソフトウェア開発では,絶対に変わらないものは何もないので,クラスの代わりにインタフェースを用いてnewを用いて生成し,DIを介して注入することは非常に簡単で容易な作業である.現在、等級を変更して使用する計画がなくても、ある日変更が必要な場合は、変更の時間とコストを減らすことができます.
  • クラスの実装方式を変更しなくても、インタフェースを保持してDIを適用すれば、異なるレベルのサービス機能を導入することができるからである.スプリングのAOP技術を応用するためには,基本的にDIの応用が必要である.
  • のテストを容易にするためにもDIを適用すべきである.
    DIは,小セルオブジェクトとは独立した作成と実行をテストする上で重要な役割を果たす.
  • テストコードから生成されたDI
    テスト中に実際に実行しているDBに対してユーザー情報を修正または削除した場合?
    そうしない場合は、@DirtiesContextを使用してApplicationContextの構成またはステータスの変更を通知し、DataSourceの情報を再生成して使用できます.しかし、注入されたものを覆い直す?した感じで
    独立DIを設定する方法があります.
    テスト用独立DI設定
    本にはxmlファイルが単独で配置されており、@ContextConfigurationでプロファイルの情報をお伝えしていますが、propertiesファイルを適用しているのでブラウズしてみました.
    https://stackoverflow.com/questions/32974432/spring-junit-testing-properties-file
    配置に使用するローカルDB情報と、設定に使用するローカルDB情報とを分離します.
    application-test.propertiesファイルを作成してパスを指定しようとしたところ、検索するとスタックオーバーフローに良い答えがありました.
    testでは、ファイル名の違いを強制することなく、@PropertySource("classpath:application.properties")でパスを教える方法があります.
    容器なしDI試験
    public class UserDaoTest {
    	UserDao dao;
        
        @Before
        public void setUp() {
        	dao = new UserDao();
            DataSource dataSource = new SingleConnectionDataSource("jdbc:mysql://localhost/testdb", "spring", "book", true);
            dao.setDataSource(dataSource);
        }
        
    }
    @Autowiredを必要とせず、直接オブジェクトを作成し、関係を設定します.
    Autowiredが1つしか入力されていない場合は、このフィールドは省略できます.
    @Beforeメソッドは無条件に実行されるため、メソッドの内部で作成できます.

    テスト学習


    学習テストの利点

  • は、異なる条件に応じて機能を容易に確認することができる.
  • はテストコードを学習し、開発中に
  • を参照することができる.
  • フレームワークまたは製品のアップグレード時に互換性の検証を支援します.
  • これは
  • テストの作成に対する良好な訓練である.
  • の新しい技術を学ぶ過程は楽しくなりました.ハハハ