ユニットテストを作成しようとしている既存のアプリケーションがあります。本当の 'サービス'レイヤはありません。それはコントローラ - >リポジトリ - >データベースに行き、エンドポイントはコントローラのアノテーションによって定義されます。私はSpring Boot 1.3.8(1.4ではなく)を使用しています。Springテスト - モックコントローラ付きテストエンドポイント
私がしたいことは、私が確認できるモックコレクションを返すようにコントローラをモックすることです。何が起こっているのかアプリはブートストラップされており、実際のデータはシードされています。私がエンドポイントを呼び出すと、実際のアプリケーションデータが返されます。だから、私は2つの問題があるように思えます:私はユニットテストでは実行したくないデータセットアップと設定を行い、第2に、モックコントローラは無視されています。おそらく関連しているでしょう。どんな助けもありがとうございます。ありがとう。あなたは、リポジトリ上の方法を模擬したいコレクションを持って、コントローラ内部で何らかの処理を行う、修正コレクションを返すことができるように
@Autowired
private WebApplicationContext context;
private MockMvc mockMvc;
@Mock
private ApplicationController applicationController = new ApplicationController();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
}
@Test
public void contextLoads() {}
@Test
public void testEndPoints() throws Exception {
Application testApp = TestUtils.generateApplication();
Mockito.when(applicationController.getApplications()).thenReturn(Arrays.asList(testApp));
log.info("Verifying applications endpoint is up and running.");
mockMvc.perform(get("/applications/")).andExpect(status().isOk())
.andDo(print())
.andExpect(content().contentType(TestUtils.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$.[0].name",is("my_name")));
}
ありがとう:よう
何か。私は実際にあなたが示したものとほぼ同じように見える 'ServiceTests'のクラスを持っています。最初から、コントローラーが委任してからビジネスロジックを持ち、データのリポジトリを呼び出すサービスレイヤーを作成しました。私がしたいのは、単純にダミーデータが返されたエンドポイントを呼び出してテストし、いくつかのJSON値とhttpステータスをチェックすることです。私がコントローラーをモックしないと、コントローラーメソッドにはスタッブできないプライベートメソッドがいくつかあるので問題があります。 – Mike
あなたがテストしようとしていることは私にはっきりとは分かりません。私はあなたのコントローラーをテストしたいと思っていました。しかし、あなたがただそれを嘲笑してすぐにデータを返すのであれば、それでは何をテストしていますか? – borowis