Spring Boot Controllerのエンドポイントに対するユニットテストの書き方
2023-08-13 07:53:17
質問内容
以下のようなSpring Bootのサンプルアプリがあります。
Bootメインクラス
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
コントローラ
@RestController
@EnableAutoConfiguration
public class HelloWorld {
@RequestMapping("/")
String gethelloWorld() {
return "Hello World!";
}
}
コントローラのユニットテストを書くのに一番簡単な方法は何でしょうか?私は以下を試しましたが、WebApplicationContextの自動配線に失敗していると文句を言われました。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = DemoApplication.class)
public class DemoApplicationTests {
final String BASE_URL = "http://localhost:8080/";
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
@Test
public void testSayHelloWorld() throws Exception{
this.mockMvc.perform(get("/")
.accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"));
}
@Test
public void contextLoads() {
}
}
どのように解決するのですか?
Spring MVCでは standaloneSetup があり、コンテキストを必要としない、比較的単純なコントローラのテストをサポートしています。
MockMvcを構築するには、@Controllerのインスタンスを1つ以上登録し、Spring MVCのインフラをプログラムで設定します。 のインスタンスを登録し、Spring MVCのインフラをプログラム的に設定することで、MockMvcを構築します。これにより コントローラのインスタンス化と初期化を完全に制御することができます。 のインスタンスとその依存関係を完全に制御できるようになり、 単体テストと同様に 一度に一つのコントローラをテストすることができます。
コントローラのテストの例としては、次のような簡単なものがあります。
public class DemoApplicationTests {
private MockMvc mockMvc;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorld()).build();
}
@Test
public void testSayHelloWorld() throws Exception {
this.mockMvc.perform(get("/")
.accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"));
}
}
関連
-
スレッド "main "での例外 java.util.NoSuchElementException in Java 問題解決済み
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] ファイルを作成し、書き込むにはどうすればよいですか?
-
[解決済み] Pythonの関数が例外を投げるかどうかをテストするにはどうすればよいですか?
-
[解決済み] Spring Bootアプリケーションにポートを設定する方法
-
[解決済み] TDDのためのJavaScriptユニットテストツール
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
javaの非静的メソッドを静的に参照することができない
-
Uncaught ReferenceError: は定義されていません。
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
Javaがテキストファイルを読み込む
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
org.xml.sax.SAXParseExceptionのエラー解決方法
-
Java の double データ型における 0.0 と -0.0 の問題
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。