SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
基礎から見直す ASP.NET MVC
   の単体テスト自動化方法
~ Windows Azure 関連もあるかも~
   Microsft MVP for Windows Azure

                          割と普通



                                    1
自己紹介
• 割と普通 ( @normalian )
 – Windows Azure のコミュニティメンバ
   • Japan Windows Azure User Group
     http://r.jazug.jp/
 – わんくま同盟 のコミュニティメンバ
   • http://www.wankuma.com/
 – Microsoft MVP for Windows Azure 2010~




                                           2
本セッションの目的とゴール
• 目的
 – C#/VB.NET で単体テスト自動化するため、どのよ
   うにテストコードを記述すれば良いかを認知
 – 単体テスト自動化を支援するツール、ライブラリ群を
   認知


• ゴール
 – C#/VB.NET で、単体テストの自動化が可能なテ
   ストコードを効率的に記述することができる

                                 3
アジェンダ
 何故 単体テスト自動化 が必要?

  単体テスト自動化 のコツ

  単体テストを効率化するツール群

  まとめ

 参考
何で単体テスト自動化が必要?
• 良く言われるのは以下のメリット
 – 単体テストの工数を削減できる

 – コードの保守・再利用性が向上する

 – コードが綺麗になる




                      5
単体テストの工数を削減できる

仕様変更が増える程、単体
  テスト工数は増大




                  6
コードの保守・再利用性が向上する
• 変更に伴うデグレを瞬時に検知できる
 – リファクタリングや保守が容易
 – 単体テストコードの動作検証がいつでも可能


• 外部仕様が容易に理解できる
 – メソッドの外部仕様がテストコードに記載
 – ドキュメント・コードの二重化を防止



                          7
コードが綺麗になる
• ソースコードのテスタビリティが向上する
 – 単体テストの自動化を意識したインターフェースの定
   義を強制
 – テストコードをマニュアルとして利用可能
 – コーディング力が向上


• 若手、新人の教育向けに適用できる



                              8
アジェンダ
 何故 単体テスト自動化 が必要?

  単体テスト自動化 のコツ

  単体テストを効率化するツール群

  まとめ

 参考
単体テストの対象を明確化する
• データの入出力ポイントに対して単
  体テストを実施する   モデルのテスト

HTML/   Java       画面      コント    モデル
 CSS    Script     モデル     ローラ




JavaScript で記    JavaScript から
                                 コントローラの
述したロジック          C# へのマッピ
                                 テスト
のテスト             ング                     JavaScript
                                        C#
                                                     10
単体テスト自動化が容易なインター
   フェースを定義する 1/3
• 従来の ASP.NET Web Forms では、単体テ
  ストの自動化がきわめて困難
  メインコード




  テストコード
単体テスト自動化が容易なインター
  フェースを定義する 2/3
• ASP.NET MVC で単体テストの自動化が容易に
   メインコード




   テストコード
単体テスト自動化が容易なインター
   フェースを定義する 3/3
• Testing Framework や NUnit 等で自動テ
  スト可能な外部インターフェース設計とする
             ViewReult   コント
             • ViewBag   ローラ
             • Model

             Web API の
               応答


            XXXXResult
             (その他の応答)
                                    13
変数名の命名規則に留意する 1/2

• テストメソッド名、変数名からチェック対象を理解
  できるように命名する

良い例
 [TestMethod]
 public void Indexがリストを返す()
 {
    List<string> expect = new List<string>(){ "a", "b", "c" };
    List<string> actual = null;
    HomeController controller = new HomeController();
    actual = (controller.Index() as ViewResult).Model;
    Assert.Equals( expect, actual );
 }
                                                                 14
変数名の命名規則に留意する 2/2

• 「悪い例」では、テストメソッド名、変数名から
  チェック対象が理解できない

悪い例
 [TestMethod]
 public void Index ()
 {
    HomeController controller = new HomeController();

     var actual = (controller.Index() as ViewResult).Model;

     Assert.Equals(new List<string>(){ "a", "b", "c" }, actual );
 }
                                                                    15
1メソッド・1アサートを心がける 1/2
• テスト対象を明確化するため、1メソッド・1アサートを
  心がける
• if 文, for 文, while 文に Assert はダメ、絶対
良い例
 string expect = XXXXXX;
 string actual = null;

 (中間ロジック)

 Assert.Eqauls( expect, actual );



                                        16
1メソッド・1アサートを心がける 2/2
• 「悪い例」では、チェックする場所が散って何をチェックして
  いるか分からない
悪い例
 string expect = XXXXXX;
 string actual = null;

 (中間ロジック)

 if(flag == true) {
   Assert.Eqauls( expect, actual );
 }else{
     Assert.Fail(“ここは通らないはず”);
 }
                                      17
モックを効率的に作成する 1/2
• Moq.dll 等を利用して HttpContextBase,
  IPrincipal, IIdentity 等のモック作成が難しい
  クラスを作成する
 [TestMethod()]
 public void IndexTest01()
 {
                                                                                            • Moq.dll を利用してもス
   string expect = typeof(RedirectToRouteResult).FullName;
   string actual;
   BuyHistoryController target = new BuyHistoryController(new TestOrderRepository());
                                                                                              テップ数が多い
     //モックの作成
     var mockHttpContextBase = new Mock<HttpContextBase>();
                                                                                            • Moq.dll を利用しないと
     var mockIdentity = new Mock<IIdentity>();
     var mockPrincipal = new Mock<IPrincipal>();                                              数倍のコード行数になる
     //ユーザ情報の設定&httpContextオブジェクトの作成
     mockIdentity.Setup(identity => identity.IsAuthenticated).Returns(true);
     mockIdentity.Setup(identity => identity.Name).Returns("someUser");
     mockPrincipal.Setup(principal => principal.Identity).Returns(mockIdentity.Object);
     mockHttpContextBase.Setup(httpContextBase => httpContextBase.User)
        .Returns(mockPrincipal.Object);

     ControllerContext context = new ControllerContext(mockHttpContextBase.Object, new RouteData(), target);
     target.ControllerContext = context;
     actual = target.Index().GetType().FullName;
     Assert.AreEqual(expect, actual);
 }




                                                                                                                18
モックを効率的に作成する 2/2
• モック作成は行数が伸びるので共通化する
[TestMethod()]
public void IndexTest01(){
   string expected= typeof(RedirectToRouteResult).FullName;
   string actual;
   BuyHistoryController target =           モック作成を共通化
        new BuyHistoryController(new TestOrderRepository());
   ControllerContext context = new ControllerContext(
      Utils.CreateControllerContext(true, "someuser")
      , new RouteData(), target);
   target.ControllerContext = context;
   actual = target.Index().GetType().FullName;
  Assert.AreEqual(expect, actual);
}

                                                               19
名前空間、クラス名の命名規則に留意する

• テスト対象のプロジェクト、クラスが分かりやすいよう
  に命名規則を規定する
 – プロジェクト名:MyMVC → MyMVC.Test
 – クラス名: MyClass → MyClassTest
 – メソッド名: MyMethod → MyMethodTest


• 命名規約に従うことで、 TestDriven.NET を利
  用した、メインコード/テストコードの切り替えが可能
 – http://www.testdriven.net/quickstart.aspx

                                               20
アジェンダ
 何故 単体テスト自動化 が必要?

  単体テスト自動化 のコツ

  単体テストを効率化するツール群

  まとめ

 参考
ツールを利用したテスト効率化したい
• 紹介したツール・ライブラリを利用
  してテストを自動化する
HTML/   Java     画面    コント   モデル
 CSS    Script   モデル   ローラ




                                   JavaScript
                                   C#
                                                22
ツールを利用したテスト効率化(β)
• 紹介したツール・ライブラリを利用
  してテストを自動化する
HTML/    View          View    コント   モデル
 CSS     Model         Model   ローラ

                 knocko                Entity
    knock                  AutoM
                 ut.map                Frame
    out.js                 apper
                 ping.js                work



                                           JavaScript
                                           C#
                                                        23
ツールを利用したテスト効率化(β)
• 紹介したツール・ライブラリを利用
  してテストを自動化する
HTML/  View    View      コント モデル
 QUnit-tap
 CSS   Model   Model   Testing
                        ローラ
で単体テス knocko Framework Entity
 ト自動化 ut.map 単体テスト自動化
  knock          AutoM
                            Frame
  out.js         apper
node.exe ping.js MSTest.exe work

                                   JavaScript
                                   C#
                                                24
紹介するツール・ライブラリ群
• 今回は以下のライブラリ・ツールを紹介
 –   knockout.js
 –   knockout.mapping.js
 –   AutoMapper
 –   Qunit-tap
knockout.js
• DOM 要素と JSON オブジェクトのマッピング機能
 var viewModel = {
    left: ko.observable( 30 ),
    right: ko.observable( 40 )    onblur 等のイベントが発生した
 };                               タイミングで、ViewModel と
  viewModel.answer =              DOM要素で値を同期
     ko.dependentObservable(function () {
         return parseInt(this.left()) + parseInt(this.right());
     }, viewModel);
 ko.applyBindings(viewModel);

 <input type=“text” data-bind=“value: left” /> +
 <input type=“text” data-bind=“value: right” /> = <span data-
 bind="text: answer"></span>
                                                                26
Knockout.mapping.js 1/2
• C#/VB.NET の ViewModel と JSON オブジェクト
  をマッピング             { name: “若人”, age: 20}
                              等のJSONに置換される処理
    <script type="text/javascript">
      //JSONオブジェクトから、ViewModel を作成
      var initialData =
          @Html.Raw(Json.Encode(Model));
      var viewModel = ko.mapping.fromJS(initialData);

      //DOM要素を読み込み後、ViewModel を Binding
      $( function(){
           ko.applyBindings(viewModel);
       });
    </script>              DOM 要素 と viewModel イ
                            ンスタンスとを双方向バインド
                                                        27
Knockout.mapping.js 2/2
• C#/VB.NET の ViewModel と JSON オブジェクト
  をマッピング
   $.ajax({
     type:“POST”, dataType: "json",
     contentType: "application/json",
     data : ko.mapping.toJSON(viewModel),
     url: "@Url.Content("~/api/Values/")",
     success :
        function(res){ alert(JSON.stringify(res)); }
   });

  public class ValuesController : ApiController{
       public string Post(ViewModel viewModel){
             return "server recieved answer = " +
    viewModel.answer; }
                                                       28
AutoMapper
• Model – ViewModel といったモデル間のマッピ
  ングを実施する
• 複数モデルからの集約化等、細かな制御が可能

    Model                ViewModel




     項目1

     項目2
AutoMapper
• 「XXX.ID = YYY.ID」の羅列を防止できる
• マッピングが存在しない場合は一括でチェック可能
 Product product = ProductRepository.GetById(id);

 Mapping.AutoMapperBootstrapper.Configure();

 Mapper.CreateMap<Product, ProductViewModel>();
 Mapper.Map<Product, ProductViewModel>(product);

 var productViewModel = Mapper.Map<Product,
 ProductViewModel>(product);
QUnit-tap の利用
• node.exe から実行可能な QUnit
 – node.exe → Node.js の Windows 実装
 – QUnit → ブラウザ上で JavaScript を単体テスト
• knockout.js の ViewModel が対象?
  require('../test_helper.js');
  QUnit.test('my calc test', function() {
     var expect = 3;
     var actual = calc( 1, 2 );
     assert.equal(expect, actual);
  });
  QUnit.start();
アジェンダ
 何故 単体テスト自動化 が必要?

  単体テスト自動化 のコツ

  単体テストを効率化するツール群

  まとめ

 参考
まとめ
• ASP.NET MVC は単体テストの自動化に向
  いている

• 単体テストの自動化を実施するためにはコツ
  がある

• 単体テストの自動化を支援するツールは多々
  存在する
View と コントローラの構成 (β)
HTML/CSS                        ViewM
                View knockout.map       Contr   Model
    knockout.js Model   ping.js  odel   oller        Entity
                                                  Framework
HTML/CSS                       ViewM
                View knockout.map
    knockout.js
                Model ping.js odel              Model
HTML/CSS        View           ViewM                 Entity
                     knockout.map
    knockout.js
                Model ping.js odel                Framework

                                   1対N      N対M
           1対1 対応
                                   対応       対応

                                                対応関係
                                                C#
                                                JavaScript
アジェンダ
 何故 単体テスト自動化 が必要?

  単体テスト自動化 のコツ

  単体テストを効率化するツール群

  まとめ

 参考
参考 1/2
• InfoQ – ASP.NET MVC のテスト方法
   – http://www.infoq.com/jp/news/2012/03/aspnet-
     unit-test
• MSDN Library – ASP.NET MVC アプリケーションの単体テスト
   – http://msdn.microsoft.com/ja-
     jp/library/ff936235.aspx
• ASP.NET MVC3 における単体テストの基礎
   – http://codezine.jp/article/detail/6493
• wa りと na はてな日記 - Moq.dll on ASP.NET MVC その2
   – http://d.hatena.ne.jp/waritohutsu/20090909/
参考 2/2
• knockout.js Documentation > mapping
   – http://knockoutjs.com/documentation/plugins-
     mapping.html
• knockout.js Documentation > The “template”
  binding
   – http://knockoutjs.com/documentation/template-
     binding.html
• knockout.js の注意すべき点
   – http://d.hatena.ne.jp/shiba-yan/20120130/
• miso_soup3 - AutoMapper+ViewModel In MVC その2
   – http://d.hatena.ne.jp/miso_soup3/20120408/
余談!
というか



続編!
クラウド上で単体テスト自動化
• Trac Lightning on Windows Azure
  – https://github.com/normalian/WATracLightning
テスト自動化もクラウドへ…
単体テスト自動化

(手動キック)

 単体テストの自動化

 (自動キック)


   全てクラウドへ・・・
自はこ
    動ての
    テし
    スな
    トく
    坂遠
    をい
    よ
    ・
    ・
    ・




未
          ばのよオ
          かぼうレ
          りりやは
          だはく
          かじ




完
          らめ
          なた

Weitere ähnliche Inhalte

Was ist angesagt?

クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-RetryフレームワークY Watanabe
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション土岐 孝平
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編まべ☆てっく運営
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理msssgur
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことBIGLOBE Inc.
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやyoku0825
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなしOonishi Takaaki
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法についてYuji Otani
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓貴仁 大和屋
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8Koichiro Matsuoka
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRshinnosuke kugimiya
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことyoku0825
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 

Was ist angesagt? (20)

ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編負荷テストを行う際に知っておきたいこと 初心者編
負荷テストを行う際に知っておきたいこと 初心者編
 
Airflowで真面目にjob管理
Airflowで真面目にjob管理Airflowで真面目にjob管理
Airflowで真面目にjob管理
 
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したことドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし初心者向け負荷軽減のはなし
初心者向け負荷軽減のはなし
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓SQL Server運用実践 - 3年間80台の運用経験から20の教訓
SQL Server運用実践 - 3年間80台の運用経験から20の教訓
 
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
ドメイン駆動設計 モデリング_実装入門勉強会_2020.3.8
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
Metaspace
MetaspaceMetaspace
Metaspace
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 

Andere mochten auch

ユニットテストを意識して安心しよう
ユニットテストを意識して安心しようユニットテストを意識して安心しよう
ユニットテストを意識して安心しようYuta Matsumura
 
Sencha フレームワークの統合開発ツール Sencha Cmd
Sencha フレームワークの統合開発ツール Sencha CmdSencha フレームワークの統合開発ツール Sencha Cmd
Sencha フレームワークの統合開発ツール Sencha Cmd久司 中村
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた一希 大田
 
Henrik Kniberg - Scrum and XP beyond the trenches
Henrik Kniberg - Scrum and XP beyond the trenchesHenrik Kniberg - Scrum and XP beyond the trenches
Henrik Kniberg - Scrum and XP beyond the trenchesAgileSparks
 
cara instalasi sistem operasi jaringan
cara instalasi sistem operasi jaringancara instalasi sistem operasi jaringan
cara instalasi sistem operasi jaringanokayfirdaus
 
ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99Katsuya Shimizu
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いToshihiro Kawachi
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider貴志 上坂
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニックmiso- soup3
 
認定スクラムマスター研修に行ってきました
認定スクラムマスター研修に行ってきました認定スクラムマスター研修に行ってきました
認定スクラムマスター研修に行ってきましたHajime Yanagawa
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例masakazusegawa
 
単体テストで工数を短縮する
単体テストで工数を短縮する単体テストで工数を短縮する
単体テストで工数を短縮するWataru Terada
 

Andere mochten auch (15)

ユニットテストを意識して安心しよう
ユニットテストを意識して安心しようユニットテストを意識して安心しよう
ユニットテストを意識して安心しよう
 
Sencha フレームワークの統合開発ツール Sencha Cmd
Sencha フレームワークの統合開発ツール Sencha CmdSencha フレームワークの統合開発ツール Sencha Cmd
Sencha フレームワークの統合開発ツール Sencha Cmd
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた
 
Henrik Kniberg - Scrum and XP beyond the trenches
Henrik Kniberg - Scrum and XP beyond the trenchesHenrik Kniberg - Scrum and XP beyond the trenches
Henrik Kniberg - Scrum and XP beyond the trenches
 
cara instalasi sistem operasi jaringan
cara instalasi sistem operasi jaringancara instalasi sistem operasi jaringan
cara instalasi sistem operasi jaringan
 
ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99
 
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙いKnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
KnockoutJS勉強会 プロジェクトにmvvmを適用する狙い
 
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsiderMoq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
Moq & Fakes Framework を使った実践的ユニットテスト - BuildInsider
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック
 
認定スクラムマスター研修に行ってきました
認定スクラムマスター研修に行ってきました認定スクラムマスター研修に行ってきました
認定スクラムマスター研修に行ってきました
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例KnockoutJSを使用したアプリケーションの構築例
KnockoutJSを使用したアプリケーションの構築例
 
単体テストで工数を短縮する
単体テストで工数を短縮する単体テストで工数を短縮する
単体テストで工数を短縮する
 
市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①市場で勝ち続けるための品質とテストの技術①
市場で勝ち続けるための品質とテストの技術①
 

Ähnlich wie 基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~

Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発Akira Inoue
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWINYoshifumi Kawai
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】Tomoharu ASAMI
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...Akira Inoue
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010stomita
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share久司 中村
 

Ähnlich wie 基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~ (20)

Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発ASP.NET MVC と jQuery で実践する標準志向 Web 開発
ASP.NET MVC と jQuery で実践する標準志向 Web 開発
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
Spring と TDD
Spring と TDDSpring と TDD
Spring と TDD
 
ASP.NET MVC 1.0
ASP.NET MVC 1.0ASP.NET MVC 1.0
ASP.NET MVC 1.0
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
 
20090212
2009021220090212
20090212
 
Ajax 応用
Ajax 応用Ajax 応用
Ajax 応用
 
Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010Apexコアデベロッパーセミナー(Apexコード)071010
Apexコアデベロッパーセミナー(Apexコード)071010
 
Sencha ug3 siesta_share
Sencha ug3 siesta_shareSencha ug3 siesta_share
Sencha ug3 siesta_share
 

Mehr von normalian

エンプラはつらいよ~クラウド提案時に気を付けるポイント~
エンプラはつらいよ~クラウド提案時に気を付けるポイント~エンプラはつらいよ~クラウド提案時に気を付けるポイント~
エンプラはつらいよ~クラウド提案時に気を付けるポイント~normalian
 
20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみた20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみたnormalian
 
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Database
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL DatabaseWindows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Database
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Databasenormalian
 
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発normalian
 
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かすWebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かすnormalian
 
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~normalian
 
Windows Azure Bootcamp メディアサービス編
Windows Azure Bootcamp メディアサービス編Windows Azure Bootcamp メディアサービス編
Windows Azure Bootcamp メディアサービス編normalian
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトnormalian
 
WebSphere V7を Windows Azure上で動かすまで
WebSphere V7を Windows Azure上で動かすまでWebSphere V7を Windows Azure上で動かすまで
WebSphere V7を Windows Azure上で動かすまでnormalian
 
デベロッパーサミット2012 JAZUG LT
デベロッパーサミット2012 JAZUG LTデベロッパーサミット2012 JAZUG LT
デベロッパーサミット2012 JAZUG LTnormalian
 
SL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×SilverlightではまったことSL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×Silverlightではまったことnormalian
 
JAZ一周年総会 Windows Azure 直近の更新
JAZ一周年総会 Windows Azure 直近の更新JAZ一周年総会 Windows Azure 直近の更新
JAZ一周年総会 Windows Azure 直近の更新normalian
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~normalian
 
2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~normalian
 
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~normalian
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門normalian
 
CLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows AzureストレージについてCLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows Azureストレージについてnormalian
 
わんくまっちゃ445同盟 SilverlightでTdd(仮)
わんくまっちゃ445同盟 SilverlightでTdd(仮)わんくまっちゃ445同盟 SilverlightでTdd(仮)
わんくまっちゃ445同盟 SilverlightでTdd(仮)normalian
 

Mehr von normalian (19)

エンプラはつらいよ~クラウド提案時に気を付けるポイント~
エンプラはつらいよ~クラウド提案時に気を付けるポイント~エンプラはつらいよ~クラウド提案時に気を付けるポイント~
エンプラはつらいよ~クラウド提案時に気を付けるポイント~
 
20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみた20140920 大分進化したメディアサービスで遊んでみた
20140920 大分進化したメディアサービスで遊んでみた
 
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Database
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL DatabaseWindows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Database
Windows Azure 上の WebLogic Server 12c から JPA を利用した O/R マッピング to SQL Database
 
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
Windows Azure 上で Eclipse と WebLogic Server 12c で JavaEE6 開発
 
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かすWebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす
WebLogic Server 12c を Windows Azure の Windows Server 2012 R2 で動かす
 
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~
バックエンドサービスに日の目を当てて愛でましょう ~メディアサービス&HDInsight編~
 
Windows Azure Bootcamp メディアサービス編
Windows Azure Bootcamp メディアサービス編Windows Azure Bootcamp メディアサービス編
Windows Azure Bootcamp メディアサービス編
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイト
 
WebSphere V7を Windows Azure上で動かすまで
WebSphere V7を Windows Azure上で動かすまでWebSphere V7を Windows Azure上で動かすまで
WebSphere V7を Windows Azure上で動かすまで
 
デベロッパーサミット2012 JAZUG LT
デベロッパーサミット2012 JAZUG LTデベロッパーサミット2012 JAZUG LT
デベロッパーサミット2012 JAZUG LT
 
SL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×SilverlightではまったことSL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×Silverlightではまったこと
 
JAZ一周年総会 Windows Azure 直近の更新
JAZ一周年総会 Windows Azure 直近の更新JAZ一周年総会 Windows Azure 直近の更新
JAZ一周年総会 Windows Azure 直近の更新
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~2010年インストールマニアックス ~Javaアプリ編~
2010年インストールマニアックス ~Javaアプリ編~
 
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
T51 jQueryで学ぶJavaScriptでのフロント開発~ASP.NET MVC3もあるよっ!~
 
T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門T35 ASP.NET MVCを使ったTDD入門
T35 ASP.NET MVCを使ったTDD入門
 
CLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows AzureストレージについてCLR/H勉強会44回目 Windows Azureストレージについて
CLR/H勉強会44回目 Windows Azureストレージについて
 
わんくまっちゃ445同盟 SilverlightでTdd(仮)
わんくまっちゃ445同盟 SilverlightでTdd(仮)わんくまっちゃ445同盟 SilverlightでTdd(仮)
わんくまっちゃ445同盟 SilverlightでTdd(仮)
 

基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~