私は春のブートにはかなり新しく、基本的なマイクロサービスをまとめました(それはYelpのURLを受け取り、そのレストランの画像をスクラップします)。私は単体テストを書くのは良い時期だと思っていましたが、私が問題を抱えているのは、サーブレットのリクエスト/レスポンスのテストにモッククラスを注入することです。Springブート - サーブレットリクエスト/レスポンスのテスト、モッククラスの挿入方法?
私がテストしようとしているコードは非常にシンプルですが、このように見えます。これは基本的に私のサービスのエントリーポイントであり、JSON本体を受け取り、そこからYelp URLを抽出し、次にYelpRequestController.makeYelpRequest()
はイメージをスクラップしてArrayList内のイメージリンクを返すことに注意します。
@RestController
public class RequestController {
@PostMapping(value = "/")
public ArrayList<String> index(@RequestBody String reqBodyString) {
//my own function to parse the json string
HashMap<String, String> requestBody = parseReqBodyString(reqBodyString);
String yelpURL = requestBody.get("yelpURL");
YelpRequestController yelpRequest = new YelpRequestController(yelpURL);
ArrayList<String> yelpImgLinks = yelpRequest.makeYelpRequest();
return yelpImgLinks;
}
}
これは私のユニットテストコードです。それは基本的にJSON文字列を作成し、私のRequestControllerに要求を送信し、応答が大丈夫であることを確認します。今は通過しますが、テストではRequestController
とそれ以外のテストはしません。現在は、テストからのURLをYelpRequestController
に送信し、このテストでRequestController
を隔離したいので、私が望まない画像のスクレイピングを開始します。私はYelpRequestController
クラスを嘲笑して結果を返そうとしていましたが、本当にたくさんのトラブルを抱えています。
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class RequestControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void postRequestController() throws Exception {
ObjectMapping jsonObject = new ObjectMapping();
jsonObject.setYelpUrl("https://www.yelp.ca/biz/l-industrie-pizzeria-brooklyn");
Gson gson = new Gson();
String json = gson.toJson(jsonObject);
mvc.perform(MockMvcRequestBuilders.post("/")
.accept(MediaType.APPLICATION_JSON)
.content(json))
.andExpect(status().isOk());
}
}
私はMockitoを使用して、別のクラスをモック、あなたがテストしているクラスにそれを注入する方法を理解する方法について読んでてきました。しかし、私は本当にここでそれを適用しようとして立ち往生しています。どんな助けもありがとう。
:
をあなたのテストクラスでは、あなたは自動的に
@Autowired
フィールドのためにそれを使用します@MockBean
と春と嘲笑しているしたいクラスに注釈を付けますYelpRequestControllerをSPring Beanにします。あなたのRequestControllerでそれをAutowireしてください。 yelpURLをコンストラクタではなくmakeYelpRequest()メソッドに渡して、ステートレスオブジェクトにします。その後、ユニットテストは、YelpRequestControllerをRequestControllerに挿入することができます。テスト容易性はすべて依存性注入に関するものです。 'new'を使って依存関係を自分で作成すると、モックの依存関係を挿入することができなくなります。 –ありがとうございました、私はそれを検討します! – user2889046