Spring BootとAWSが単独で実施するWebサービス[2]
26123 ワード
🐯 第02章Spring Bootでテストコードを作成する🐯
最近の傾向は、多くのサービス会社がコードのテストを要求していることです.第二章はプロジェクトの中で最も重要なテストコードの作成の基本的な知識を学ぶ.
1.テストコードの概要
TDDとユニットテストンは違う物語です.TDDとはテスト主導の開発であり,テストコードの作成から始まる.逆に、ユニットテストとは、TDDを記述する最初のステップ、すなわち機能ユニットのテストコードである.
なぜユニットテストコードを作成するのか
筆者の経験談
2.Hello Controllerテストコードの作成
作成したプロジェクトにパッケージを作成します.一般的に、パッケージ名はウェブサイトのアドレスの逆順序です.(はい-admin.jojodu.com-->com.jojodu.admin)
アプリケーションクラスの作成
生成されたパッケージにアプリケーション名でJavaクラスを作成し、次のようにクラスのコードを記述します.package com.jojoldu.book.springbootaws;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
このアプリケーションクラスは、将来作成するプロジェクトのメインクラスです.@SpringBootアプリケーションでは、スプリングの起動、読み取り、およびスプリングbeanの作成を自動的に設定できます.特に、@SpringBootApplicationが存在する場所から設定を読み込むため、このクラスは常にプロジェクトの上部にある必要があります.
プライマリ・メソッドで実行されるSpringApplication.run組み込みWebアプリケーションサーバ(WAS)を実行します.
埋め込みWASとは、アプリケーションの実行時にWASを内部で実行することであり、WASを外部に単独で置くことではない.これにより、Tomcatを常にサーバにインストールする必要がなくなり、Spring Bootによって作成されたJarファイル(実行可能なJavaパッケージファイル)を実行するだけで済みます.
コントローラクラスの作成
現在の饅頭項目にwebパッケージを作成します.このパッケージには、コントローラに関連するすべてのクラスが含まれます.コントローラクラスを作成します.package com.jojoldu.book.springbootaws.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
コントローラクラスの内容.
package com.jojoldu.book.springbootaws;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
package com.jojoldu.book.springbootaws.web;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
}
テストコードの作成
WASを実行せず、作成したコードが正常に動作しているかどうかをテストコードで検証します.
src/test/java
ディレクトリで、前に作成したパッケージを再生成します.次に、テストコードを記述するクラスを作成します.テストクラス名にTestを追加します.package com.jojoldu.book.springbootaws.web;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HelloController.class)
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void hello가_리턴된다() throws Exception{
String hello = "hello";
mvc.perform(get("/hello"))
.andExpect(status().isOk())
.andExpect(content().string(hello));
}
}
RunWith(SpringRunner.class):テスト時にJUnitに組み込まれた実行者のほかに、他の実行者も実行されます.SpringRunnerというスプリングアクチュエータを使用します.すなわち、ばね起動試験とJUnitとの間で接続者として機能する.
WebMvcTest:複数のスプリングテスト言語の中で、Webの言語に集中することができます.宣言には@Controller、@Controller Addiceなどを使用できますが、@Service、@Component、@Repositoryは使用できません.ここではコントローラのみを使用するので宣言します.
@Autowired:spring管理を受け入れる空き.
private MockMvc mvc:Web APIをテストします.スプリングMVCテストの開始点です.このクラスではHTTP GET,POSTなどに対してAPIテストを行うことができる.
mvc.perform("/hello"):MockMvcを介して/helloアドレスにHTTP GET要求を発行します.フィルタをサポートし、以下のように複数の検証機能を連続的に宣言できます.
.andExpect(status().isOk()) : mvc.performの結果を検証し、HTTPヘッダの状態を検証します.(例えば、200404500、Ok-200)
.andExpect(content().string(hello)) : mvc.performの結果を検証し、応答本文の内容を検証します.コントローラは「hello」を返し、値が正しいことを確認します.
3.ロムウェアの紹介と取り付け
Javaを開発する際、ROM福は一般的なコードGetter、Setter、基本ジェネレータ、toStringなどを自動的に生成します.IntellieJでは、プラグインを利用して簡単に設定できます.
プロジェクトにロムフォードを追加
build.gradeに次のコードを追加します.compile('org.projectlombok:lombok')
Refreshにリフレッシュしてライブラリを取得します.
ライブラリが受信されている場合は、ロムフォードプラグインをインストールします.Actionを検索し、プラグインにLombokをインストールします.
4.Hello ControllerコードをROM福に変換
まずdtoパッケージをwebパッケージに追加します.その後、すべての応答DtoがDtoパッケージに追加されます.このパッケージにHelloResponseDtoを作成します.package com.jojoldu.book.springbootaws.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
compile('org.projectlombok:lombok')
まずdtoパッケージをwebパッケージに追加します.その後、すべての応答DtoがDtoパッケージに追加されます.このパッケージにHelloResponseDtoを作成します.
package com.jojoldu.book.springbootaws.dto;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public class HelloResponseDto {
private final String name;
private final int amount;
}
テストコードの作成
package com.jojoldu.book.springbootaws.web.dto;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class HelloResponseDtoTest {
@Test
public void 롬복_기능_테스트(){
String name = "test";
int amount = 1000;
//when
HelloResponseDto helloResponseDto = new HelloResponseDto(name,amount);
//then
assertThat(helloResponseDto.getName()).isEqualTo(name);
assertThat(helloResponseDto.getAmount()).isEqualTo(amount);
}
}
テストを行います.
HelloControllerでResponseDtoを使用する
@GetMapping("/hello/dto")
public HelloResponseDto helloDto(@RequestParam("name") String name,@RequestParam("amount") int amount){
return new HelloResponseDto(name,amount);
}
テスト
@Test
public void helloDto가_리턴된다() throws Exception{
String name = "hello";
int amount = 1000;
mvc.perform(
get("/hello/dto")
.param("name",name)
.param("amount",String.valueOf(amount))
)
.andExpect(status().isOk())
.andExpect(jsonPath("$.name",is(name)))
.andExpect(jsonPath("$.amount",is(amount)));
}
param:APIテストで使用するリクエストパラメータを設定します.単一値はStringのみを許可します.数値/日付などのデータを登録するには、文字列に変更する必要があります.( String.valueOf(int) )
jsonPath:JSON応答値のフィールド検証方法.$データムにフィールド名を指定します.
Reference
この問題について(Spring BootとAWSが単独で実施するWebサービス[2]), 我々は、より多くの情報をここで見つけました https://velog.io/@yoojinjangjang/스프링-부트와-AWS로-혼자-구현하는-웹-서비스2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol