SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
ユニットテスト編
アジェンダ
 はじめに
 ユニットテストの必要性
 ユニットテストの適用分野
 ユニットテストをするためのプロダクト
 Springでのユニットテスト
 Resopitoryのユニットテスト
 Serviceのユニットテスト
 Controllerのユニットテスト(Validate)
 Controllerのユニットテスト(画面遷移)
 まとめ
はじめに
 ここでは、ユニットテストの必要性と、
ユニットテストの書き方を説明する
単体テスト
ユニットテスト
結合テスト
総合テスト・システムテスト
ユーザーテスト・運用テスト
一般的なテストの流れ
ここの話
ユニットテストの必要性
 こんな経験ありませんか?
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
A:「そのときこの処理のテストしたの?」
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
A:「え?」 B:「え?」
ユニットテストの必要性
 こんな経験ありませんか?
A:「あれ?この処理がエラーで停止するよ?」
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
A:「え?」 B:「え?」
C:「・・・え??」
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発中のプロジェクトにおいて
過去にパスしたテストが
現在もパスするとは限らない
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発中のプロジェクトにおいて
過去にパスしたテストが
現在もパスするとは限らない
テストするためには
開発が終わっていないと
着手できない
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発中のプロジェクトにおいて
過去にパスしたテストが
現在もパスするとは限らない
テストするためには
開発が終わっていないと
着手できない
開発が終わりテストをパスした
コードは不具合等がない限り
修正してはならない
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発中のプロジェクトにおいて
過去にパスしたテストが
現在もパスするとは限らない
テストするためには
開発が終わっていないと
着手できない
開発が終わりテストをパスした
コードは不具合等がない限り
修正してはならない
理想的とは思えない汚コードの
修正は許されず、担当者が変
わるとメンテが不可能になる
余談・・・
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要の解決策
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発中のプロジェクトにおいて
過去にパスしたテストが
現在もパスするとは限らない
パターンを網羅した
テスト用のコードを書く
if ( 処理(パターンAのデータ) != パターンAの正常結果 ) {
エラー
}
if ( 処理(パターンBのデータ) != パターンBの正常結果 ) {
エラー
}
if ( 処理(パターンAのデータ) != パターンAの正常結果 ) {
エラー
}
if ( 処理(パターンBのデータ) != パターンBの正常結果 ) {
エラー
}
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要の解決策
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
テストするためには
開発が終わっていないと
着手できない
テスト用のコードがあれば
いつでもテストが出来る
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要の解決策
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
開発が終わりテストをパスした
コードは不具合等がない限り
修正してはならない
テスト用のコードがあれば
コードを直しても結果が
変わらないことを担保できる
if ( 処理(パターンAのデータ) != パターンAの正常結果 ) {
エラー
}
if ( 処理(パターンBのデータ) != パターンBの正常結果 ) {
エラー
}
if ( 処理(パターンAのデータ) != パターンAの正常結果 ) {
エラー
}
if ( 処理(パターンBのデータ) != パターンBの正常結果 ) {
エラー
ユニットテストの必要性
 問題点1:過去の実績は現在においては不要の解決策
B:「そんなはずはないですよ。テストしましたから」(1ヶ月前に)
C:「あ、共通処理直しました」 (先週)
理想的とは思えない汚コードの
修正は許されず、担当者が変
わるとメンテが不可能になる
余談・・・
結果が変わらないことが担保で
きているので、常に理想的で
きれいなコードを保てる
ユニットテストの必要性
 問題点2:修正の影響範囲の判定は職人技
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
修正量に応じて
テストの要/不要が
変わることはない
ユニットテストの必要性
 問題点2:修正の影響範囲の判定は職人技
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
修正量に応じて
テストの要/不要が
変わることはない
修正範囲の影響は呼出階層
等を参照して判断するが、
基本的に技術者のスキルによる
ユニットテストの必要性
 問題点2:修正の影響範囲の判定は職人技
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
修正量に応じて
テストの要/不要が
変わることはない
修正範囲の影響は呼出階層
等を参照して判断するが、
基本的に技術者のスキルによる
全てのテストをやり直せば
職人技の判断が不要になるが
それには時間と人手がかかる
ユニットテストの必要性
 問題点2:修正の影響範囲の判定は職人技
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
修正量に応じて
テストの要/不要が
変わることはない
修正範囲の影響は呼出階層
等を参照して判断するが、
基本的に技術者のスキルによる
全てのテストをやり直せば
職人技の判断が不要になるが
それには時間と人手がかかる
担当者によってテストの精度に
バラツキが出て、リスク回避の為
修正を避けるようになる
ユニットテストの必要性
 問題点2:修正の影響範囲の判定は職人技の解決策
A:「そのときこの処理のテストしたの?」
C:「してないですね。1行しか直してないですし」
修正量に応じて
テストの要/不要が
変わることはない
修正範囲の影響は呼出階層
等を参照して判断するが、
基本的に技術者のスキルによる
全てのテストをやり直せば
職人技の判断が不要になるが
それには時間と人手がかかる
担当者によってテストの精度に
バラツキが出て、リスク回避の為
修正を避けるようになる
テストを書けば
回避できる
ユニットテストの適用分野
 適用に向く分野
・共通処理プログラム
・パターンが多い処理プログラム
・ビジネスロジック
・データ更新/取得処理プログラム
・リリースを頻繁に繰り返すプロダクト
などなど・・・
 適用に向かない分野
・画面の見た目(パーツの配置)
・画面の情報を更新する処理(スプレッドの更新など)
・一度リリースしたら終了するプロダクト
あくまで例として・・・
ユニットテストの適用分野
 継続的インテグレーション(CI:continuous integration)
開発者 ソース管理
CIツールステージングサーバー
1.コミット
2.pull
6.結果の通知
3.ビルド
4.ユニットテストの実施
5.デプロイ
ユニットテストをするためのプロダクト
 以下の様な代表的なプロダクトが存在する
プロダクト 説明
JUnit Java用のユニットテストのパイオニア
NUnit JUnitをベースにした .NET用のプロダクト
Visual Studio
Unit Testing Framework
Visual Studio付属のプロダクト
DbUnit データベース操作に特化したJava用のプロダクト
以降ではJUnitを使用して、
Springで書いたJavaソースの
ユニットテストを実施する
Springでのユニットテスト
 どこでなにをテストするかがポイント
どこ なにを
Controller(画面制御) 全ての入力項目に対して、全てのパターンの
入力値を与えた妥当性(バリデート)チェック
画面遷移
Service(ビジネスロジック) パターンを網羅したロジックのチェック
Repository(データの入出力) データ取得の確認
データ保存の確認
見た目の確認や負荷テスト等は
JUnitではテストしない
Resopitoryのユニットテスト
 テスト用のクラスを準備をする
/** ProductRepositoryのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductRepositoryTest {
/** 事前処理 */
@Before
public void 事前処理( ) throws Exception {
}
/** 事後処理 */
@After
public void 事後処理( ) throws Exception {
}
}
JUnitでSpringを動かすオマジナイ
Springを起動するクラスを記述
テストの事前処理
テストの事後処理
Resopitoryのユニットテスト
 テスト対象のRepositoryを宣言
/** ProductRepositoryのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductRepositoryTest {
@Autowired
private ProductRepository productRepository;
テスト対象のRepositoryを
コンテナから取得
Resopitoryのユニットテスト
 サンプルデータの準備
/** 事前処理 */
@Before
public void 事前処理() throws Exception {
Product product1 = new Product();
product1.productCode = 1;
product1.productName = "ガム";
product1.price = 100;
productRepository.save(product1);
Product product2 = new Product();
product2.productCode = 2;
product2.productName = "アメ";
product2.price = 120;
productRepository.save(product2);
}
テスト用データを
事前処理で用意する
(これ自体が保存のテストと
言えなくもない)
Resopitoryのユニットテスト
 テストの実行
/** findOneメソッドのテスト */
@Test
public void findOneメソッドのテスト( ) {
Product product = productRepository.findOne(1);
assertEquals ( product.productName, "ガム“ );
}
テスト用メソッドだと宣言する
事前処理で用意した
データを取得する
評価メソッドで結果を評価する
product.productNameが
「ガム」ではない場合、
例外が発生しテスト失敗となる
※あくまでサンプルとして既定の処理を呼び出している。
本来は自身で作成した処理を呼んでテストする。
Resopitoryのユニットテスト
 代表的な評価メソッド
メソッド 説明
assertEquals ( A , B ) A と B が同じ値か評価する
assertTrue( A )
assertFalse( A )
A が true か false か評価する
assertNull( A )
assertNotNull( A )
A が null か nullではない か評価する
fail( ) 強制的にエラーとする
Serviceのユニットテスト
 テスト用のクラスを準備をする
/** ProductServiceのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductServiceTest {
/** 事前処理 */
@Before
public void 事前処理( ) throws Exception {
}
/** 事後処理 */
@After
public void 事後処理( ) throws Exception {
}
}
JUnitでSpringを動かすオマジナイ
Springを起動するクラスを記述
テストの事前処理
テストの事後処理
Serviceのユニットテスト
 テスト対象のServiceを宣言
/** ProductServiceのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductServiceTest {
@Autowired
private ProductService productService ;
テスト対象のServiceを
コンテナから取得
Serviceのユニットテスト
 事前準備
/** 事前処理 */
@Before
public void 事前処理() throws Exception {
}
何かあれば記述する
Serviceのユニットテスト
 テストの実行
/** プロダクト一覧を取得できるかのテスト */
@Test
public void プロダクト一覧を取得できるかのテスト() {
List<Product> list = productService.getProductList();
}
テスト用メソッドだと宣言する
テスト対象の
ビジネスロジックを呼ぶ
評価メソッドで結果を評価する
(このサンプルでは未実装)
リストの件数や内容を評価する
コードを記述する
Controllerのユニットテスト(Validate)
 テスト用のクラスを準備をする
/** ProductFormのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductFormTest {
/** 事前処理 */
@Before
public void 事前処理( ) throws Exception {
}
/** 事後処理 */
@After
public void 事後処理( ) throws Exception {
}
}
JUnitでSpringを動かすオマジナイ
Springを起動するクラスを記述
テストの事前処理
テストの事後処理
Controllerのユニットテスト(Validate)
 テスト用のバリデータを宣言
/** ProductFormのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = App.class)
public class ProductFormTest {
/** バリデータ */
private Validator validator;
妥当性検証を実行する
バリデータを宣言
Controllerのユニットテスト(Validate)
 事前準備
/** 事前処理 */
@Before
public void 事前処理() throws Exception {
validator = Validation.buildDefaultValidatorFactory( )
.getValidator( );
}
バリデータを初期化
Controllerのユニットテスト(Validate)
 テスト対象のフォーム
/** 画面の値を保持するForm */
public class ProductForm {
@NotNull
private Integer productCode;
@NotNull
@Length(max=10)
private String productName;
@NotNull
private Integer price;
入力必須
入力必須
最大文字数は10文字まで
入力必須
Controllerのユニットテスト(Validate)
 テストの実行
/** productNameの妥当性テスト */
@Test
public void productNameの妥当性テスト( ) throws Exception {
ProductForm productForm = new ProductForm( );
productForm.setProductCode( 1 );
productForm.setProductName( "ポテトチップスうすしお“ );
productForm.setPrice( 100 );
// バリデート
Set<ConstraintViolation<ProductForm>> violations =
validator.validate( productForm );
// 検証
assertEquals( violations.size( ), 1 );
for (ConstraintViolation<ProductForm> v: violations) {
assertTrue( v.getConstraintDescriptor( ).getAnnotation( )
instanceof Length);
テスト用メソッドだと宣言する
テスト対象の
フォームを初期化
productNameのみが
11文字でエラーになるはず
Controllerのユニットテスト(Validate)
 テストの実行
ProductForm productForm = new ProductForm( );
productForm.setProductCode( 1 );
productForm.setProductName( "ポテトチップスうすしお“ );
productForm.setPrice( 100 );
// バリデート
Set<ConstraintViolation<ProductForm>> violations =
validator.validate( productForm );
// 検証
assertEquals( violations.size( ), 1 );
for (ConstraintViolation<ProductForm> v: violations) {
assertTrue( v.getConstraintDescriptor( ).getAnnotation( )
instanceof Length);
}
}
バリデートの実行
エラーの数は 1 つかチェック
エラーの種類が
Length かチェック
Controllerのユニットテスト(画面遷移)
 テスト用のクラスを準備をする
/** ProductControllerのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringApplicationConfiguration(classes = App.class)
public class ProductControllerTest {
/** 事前処理 */
@Before
public void 事前処理( ) throws Exception {
}
/** 事後処理 */
@After
public void 事後処理( ) throws Exception {
}
}
JUnitでSpringを動かすオマジナイ
(Webアプリ用宣言を追加)
Springを起動するクラスを記述
テストの事前処理
テストの事後処理
Controllerのユニットテスト(画面遷移)
 テスト用のコンテキストとMVCのモックを宣言
/** ProductControllerのUT */
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringApplicationConfiguration(classes = App.class)
public class ProductControllerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
アプリケーションの設定等々を
管理するコンテキスト
リクエストとレスポンスと、
それに付随する情報の
モックオブジェクト
Controllerのユニットテスト(画面遷移)
 事前準備
/** 事前処理 */
@Before
public void 事前処理() throws Exception {
mockMvc = webAppContextSetup(wac).build();
}
モックを初期化
Controllerのユニットテスト(画面遷移)
 テストの実行(入力画面の初期表示の)
/**入力画面の初期表示のテスト */
@Test
public void 入力画面の初期表示のテスト( ) throws Exception {
mockMvc.perform(get("/product/input"))
.andExpect(status().isOk())
.andExpect(model().hasNoErrors());
}
テスト用メソッドだと宣言する
URL「/public/input」に
GETメソッドでアクセスする
結果のHTTPステータスが
OK(200)か評価する
Model(フォームの内容)に
エラー情報がないか評価する
Controllerのユニットテスト(画面遷移)
 テストの実行(入力画面から確認画面に遷移)
/** 入力画面から確認画面に遷移するテスト */
@Test
public void 入力画面から確認画面に遷移するテスト() throws Exception {
ResultActions resultActions =
mockMvc.perform(post("/product/confirm")
.contentType(MediaType.APPLICATION_FORM
.param("productCode", "1")
.param("productName", "ガム")
.param("price", "100")
);
// レスポンスの検証
resultActions.andExpect(status().isOk())
.andExpect(model().hasNoErrors());
テスト用メソッドだと宣言する
URL「/public/confirm」に
POSTメソッドでアクセスする
入力画面で入力した値として
各種パラメータを付加する
Controllerのユニットテスト(画面遷移)
 テストの実行(入力画面から確認画面に遷移)
// レスポンスの検証
resultActions.andExpect(status().isOk())
.andExpect(model().hasNoErrors());
// モデルの内容の検証
ModelMap modelMap = resultActions.andReturn( )
.getModelAndView( ).getModelMap( );
ProductForm productForm = (ProductForm)modelMap
.get("productForm");
assertEquals(productForm.getProductCode(), new Integer(1));
assertEquals(productForm.getProductName(), "ガム");
assertEquals(productForm.getPrice(), new Integer(100));
}
モデルからフォームを取得
リクエスト時に付加したパラメータが
フォームから取得できるか評価する
結果のHTTPステータスが
OK(200)か評価する
Model(フォームの内容)に
エラー情報がないか評価する
まとめ
 ユニットテストで単体テストを補完する
→ 画面を開いて境界値テスト等するより向いている
 ユニットテストを過信しない
→ ユニットテストをすれば単体テストをしなくて良いわけではない
 ユニットテストでテストのコストは下がらない
→ コードを書くので画面を開いてテストするよりコストはかかる
→ 時にはテストコードのテストも必要
 テストをするのが目的で、テストを書くのが目的ではない
→ コーディングが楽しいからと言って、目的を失ってはいけない
→ テスト中毒は程々に
 本体のコードを修正したらテストコードを直すのはマスト
→ テストが通らないテストコードはメンテナンスする意識を一気に失う
→ そのためテストコードのメンテナンスは怠らない(ビルドエラーは論外)
まとめ
 参考
■Spring MVC 3.2のSpring MVC Testを触った - コンピュータクワガタ
http://kuwalab.hatenablog.jp/entry/20130402/p1
■ Spring3(というかJSR-303)でBeanValidationのテスト « ひよっこ。
https://prepro.wordpress.com/2011/01/15/spring3%E3%81%A8%E
3%81%84%E3%81%86%E3%81%8Bjsr-
303%E3%81%A7beanvalidation%E3%81%AE%E3%83%86%E3%82
%B9%E3%83%88/
■ JSR 303 Bean Validationで遊んでみるよ! - Yamkazu's Blog
http://yamkazu.hatenablog.com/entry/20110206/1296985545
■私のBeanValidationの使い方(Java EE Advent Calendar 2013) — 裏紙
http://backpaper0.github.io/2013/12/03/javaee_advent_calendar_2
013.html

Weitere ähnliche Inhalte

Was ist angesagt?

Appium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストAppium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストMasayuki Wakizaka
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Ryosuke Uchitate
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き土岐 孝平
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考えるyasuohosotani
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座Hiroko Tamagawa
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション土岐 孝平
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Yahoo!デベロッパーネットワーク
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talkkyon mm
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconDeNA
 
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテストKLab Inc. / Tech
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみたShoya Kai
 
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】UnityTechnologiesJapan002
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜LINE Corporation
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security土岐 孝平
 
Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Shingo Kitayama
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービューMasatoshi Tada
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
AWSメンテナンス ElastiCache編
AWSメンテナンス ElastiCache編AWSメンテナンス ElastiCache編
AWSメンテナンス ElastiCache編Serverworks Co.,Ltd.
 

Was ist angesagt? (20)

Appium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテストAppium 2.0 ではじめるモバイルアプリテスト
Appium 2.0 ではじめるモバイルアプリテスト
 
Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門Form認証で学ぶSpring Security入門
Form認証で学ぶSpring Security入門
 
入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き入社1年目のプログラミング初心者がSpringを学ぶための手引き
入社1年目のプログラミング初心者がSpringを学ぶための手引き
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
インフラチームのリモートワーク
インフラチームのリモートワークインフラチームのリモートワーク
インフラチームのリモートワーク
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
 
これから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーションこれから始めるSpringのwebアプリケーション
これから始めるSpringのwebアプリケーション
 
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
 
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk自動テストの誤解とアンチパターン in 楽天 Tech Talk
自動テストの誤解とアンチパターン in 楽天 Tech Talk
 
Unityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechconUnityネイティブプラグインマニアクス #denatechcon
Unityネイティブプラグインマニアクス #denatechcon
 
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
 
CI/CDツール比較してみた
CI/CDツール比較してみたCI/CDツール比較してみた
CI/CDツール比較してみた
 
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】
【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
 
Spring fest2020 spring-security
Spring fest2020 spring-securitySpring fest2020 spring-security
Spring fest2020 spring-security
 
Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-Ansibleはじめよぉ -Infrastructure as Codeを理解-
Ansibleはじめよぉ -Infrastructure as Codeを理解-
 
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
初めてでも30分で分かるSpring 5 & Spring Boot 2オーバービュー
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
AWSメンテナンス ElastiCache編
AWSメンテナンス ElastiCache編AWSメンテナンス ElastiCache編
AWSメンテナンス ElastiCache編
 

Ähnlich wie Spring bootでweb ユニットテスト編

SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」yasuohosotani
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストShuji Watanabe
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaYuta Kawadai
 
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)masanori kataoka
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージYasutomo Arai
 
アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。Dai FUJIHARA
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略Naoki Umehara
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンスNozomi Ito
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説Kinji Akemine
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!Funato Takashi
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4favril1
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャToru Koido
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorialKazuaki Ueda
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストTsutomu Chikuba
 
[MR08] 知っておくべき UWP アプリ開発の A to Z
[MR08] 知っておくべき UWP アプリ開発の A to Z[MR08] 知っておくべき UWP アプリ開発の A to Z
[MR08] 知っておくべき UWP アプリ開発の A to Zde:code 2017
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
 
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Naoto Kishino
 
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはGUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはNozomi Ito
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料Masatoshi Itoh
 

Ähnlich wie Spring bootでweb ユニットテスト編 (20)

SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」SGT2013 技術トークス「アジャイルテスティング」
SGT2013 技術トークス「アジャイルテスティング」
 
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテストJUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
JUnit実践入門 xUnitTestPatternsで学ぶユニットテスト
 
TDD勉強会キックオフ for Java
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
 
Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)Agileツール適合化分科会(テスト自動化ツール)
Agileツール適合化分科会(テスト自動化ツール)
 
継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ継続的デリバリー読書会 第 7 章 コミットステージ
継続的デリバリー読書会 第 7 章 コミットステージ
 
アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。アジャイルテストを、壮絶に、考える。
アジャイルテストを、壮絶に、考える。
 
ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略ぼくのかんがえた iOSテスト戦略
ぼくのかんがえた iOSテスト戦略
 
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
Unit testで定時帰宅!
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
 
テスト自動化とアーキテクチャ
テスト自動化とアーキテクチャテスト自動化とアーキテクチャ
テスト自動化とアーキテクチャ
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
[MR08] 知っておくべき UWP アプリ開発の A to Z
[MR08] 知っておくべき UWP アプリ開発の A to Z[MR08] 知っておくべき UWP アプリ開発の A to Z
[MR08] 知っておくべき UWP アプリ開発の A to Z
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
 
GUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるにはGUI自動テストの保守性を高めるには
GUI自動テストの保守性を高めるには
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 

Mehr von なべ

Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎なべ
 
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題など
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題などReladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題など
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題などなべ
 
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?なべ
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編なべ
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編なべ
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編なべ
 
Lombokのススメ
LombokのススメLombokのススメ
Lombokのススメなべ
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Bootなべ
 

Mehr von なべ (8)

Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎Javaで学ぶネットワークプログラミングの基礎
Javaで学ぶネットワークプログラミングの基礎
 
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題など
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題などReladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題など
Reladomoを使ったトランザクション履歴管理をプロダクトに適用した際のメリット/デメリット/課題など
 
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?
普通のJavaエンジニアが、なぜ技術書を出版するに至ったか?
 
Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編Spring bootでweb セキュリティ(ログイン認証)編
Spring bootでweb セキュリティ(ログイン認証)編
 
Spring bootでweb バリデート編
Spring bootでweb バリデート編Spring bootでweb バリデート編
Spring bootでweb バリデート編
 
Spring bootでweb 基本編
Spring bootでweb 基本編Spring bootでweb 基本編
Spring bootでweb 基本編
 
Lombokのススメ
LombokのススメLombokのススメ
Lombokのススメ
 
はじめてのSpring Boot
はじめてのSpring BootはじめてのSpring Boot
はじめてのSpring Boot
 

Spring bootでweb ユニットテスト編