私は現在、ユーザーがカテゴリをデータベースに保存できるようにするSpring起動アプリケーションを開発中です。私は自分のコードを "仕事"にすることができますが、私はそれが私がすることができるテストの量を制限していると思うので、私の質問です。(Spring)ループ内で依存関係注入を使用できますか?
コントローラはカテゴリのリストを受信します。コントローラーはこれらのカテゴリーを反復して検証し、有効かどうかによってデータベースに保存されます。コントローラは、最終的に受信者がどのカテゴリが受け入れられたか拒否されたかを識別できるようにメッセージのリストを返します。
私はモデルメッセージ(リスト)のリストを持っており、各繰り返しでコントローラはモデルメッセージ(new ModelMessage())を呼び出し、最終的にそれをListに追加します。 各繰り返しで新しいModelMessageを挿入する方法はありますか?または新しいキーワードを使用する必要がありますか?新しいキーワードを使用すると、私のテスト能力が制限されている/コントローラをモデルメッセージに強く結合しているように感じられます。
コントローラ:
@PostMapping("/category")
public String saveCategoryModelToDatabase(@RequestBody CategoryModelWrapper categoryModelWrapper){
List<CategoryModel> categoryModelList = categoryModelWrapper.getCategoryModelList();
modelMessageList.clear();
for(CategoryModel categoryModel : categoryModelList){
//Resetting model
modelMessage = new ModelMessage(); //This tightly couples my method to the ModelMessage class, which is bad for testing?
//@Autowired modelMessage; <-- something like this? Inject a new ModelMessage with each iteration.
modelMessage.setName(categoryModel.getName());
//Resetting categoryModelErrors
Errors categoryModelErrors = new BeanPropertyBindingResult(categoryModel, "categoryModel");
categoryModelValidator.validate(categoryModel, categoryModelErrors);
if(categoryModelErrors.hasErrors()){
modelMessage.setStatus(ModelMessageStatusEnum.REJECTED);
modelMessage.setReason(MODEL_MESSAGE_0004);
}
if(categoryModelService.save(categoryModel)){
modelMessage.setStatus(ModelMessageStatusEnum.ACCEPTED);
}
else{
modelMessage.setStatus(ModelMessageStatusEnum.REJECTED);
modelMessage.setReason(MODEL_MESSAGE_0005);
}
modelMessageList.add(modelMessage);
}
return gson.toJson(modelMessageList);
}
受信者への応答の例:任意の助け:)
検索 'スコープ= "プロトタイプ"'。それは春の特徴です。 – Stewart
なぜコントローラ内にModelMessageを作成するのが悪いと思いますか?基本的には、コントローラやサービスクラス(厳密な結合が実際にはテストに悪い)についてではなく、ここで返されるデータについて話しています。メソッドをテストする場合は、入力パラメータを指定し、適切なModelMessagesがレスポンスの一部であるかどうかを確認します。私が見た最も簡単な方法の一つです。 – dunni