12

Spring コンポーネント内に@PostConstructステートメントがあります。以下のように:

@Singleton
@Component("filelist")
public class FileListService extends BaseService {

    private List listOfFiles = new Arrays.list();

    //some other functions


    @PostConstruct
    public void populate () {

        for (File f : FileUtils.listFiles(new File(SystemUtils.JAVA_IO_TMPDIR), new String[]{"txt"},true)){
            listOfFiles.add(f.getName());
        }   
    }

    @Override
    public long count() throws DataSourceException {
        return listOfFiles.size();
    }

    //  more methods .....
}

単体テスト中に@PostConstruct関数を呼び出したくないのですが、Spring に後処理を行わないように指示する方法はありますか? または、非テスト中にクラスで開始メソッドを呼び出すためのより良い注釈はありますか?

4

4 に答える 4

7

のいずれか:

  1. テストでサブクラスFileListServiceを作成し、メソッドをオーバーライドして何もしないようにします(mrembiszが言うように、テストのためだけにスキャンされたパッケージにサブクラスを配置し、マークを付ける必要があります@Primary
  2. ファイルのリストがSpringによって挿入されるように変更FileListServiceし(これはとにかくすっきりとしたデザインです)、テストでは空のリストを挿入します
  3. で作成しnew FileListService()、依存関係を自分で注入するだけです
  4. アノテーション構成を使用せずに、別の構成ファイル/クラスを使用してSpringを起動します。
于 2012-11-05T11:39:31.447 に答える
6

テストではなくFileListService依存クラスであるため、テスト用にモックできます。テスト コンテキストによってのみスキャンされる別のテスト パッケージでモック バージョンを作成します。注釈を@Primary付けて、製品版よりも優先されるようにします。

于 2012-11-05T13:07:21.937 に答える