Submit Search
Upload
xUnitハンズオン第2回テキスト
•
Download as PPTX, PDF
•
0 likes
•
711 views
mizuky fujitani
Follow
職場で開催したハンズオンの資料。
Read less
Read more
Software
Report
Share
Report
Share
1 of 39
Download now
Recommended
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
egtra
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
You&I
xUnitハンズオン第1回テキスト
xUnitハンズオン第1回テキスト
mizuky fujitani
xUnitハンズオン第4回テキスト
xUnitハンズオン第4回テキスト
mizuky fujitani
xUnitハンズオン第3回テキスト
xUnitハンズオン第3回テキスト
mizuky fujitani
TypeScriptハンズオン第2回テキスト
TypeScriptハンズオン第2回テキスト
mizuky fujitani
TypeScriptハンズオン第1回テキスト
TypeScriptハンズオン第1回テキスト
mizuky fujitani
Recommended
20160702 linuxでもできるc#でアプリ開発
20160702 linuxでもできるc#でアプリ開発
Takayoshi Tanaka
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
egtra
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
You&I
xUnitハンズオン第1回テキスト
xUnitハンズオン第1回テキスト
mizuky fujitani
xUnitハンズオン第4回テキスト
xUnitハンズオン第4回テキスト
mizuky fujitani
xUnitハンズオン第3回テキスト
xUnitハンズオン第3回テキスト
mizuky fujitani
TypeScriptハンズオン第2回テキスト
TypeScriptハンズオン第2回テキスト
mizuky fujitani
TypeScriptハンズオン第1回テキスト
TypeScriptハンズオン第1回テキスト
mizuky fujitani
Web API入門
Web API入門
Masao Takaku
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
Hiroshi Kawada
JSer Class #3
JSer Class #3
mizuky fujitani
JSer Class #2
JSer Class #2
mizuky fujitani
One night Vue.js
One night Vue.js
Masahiro Kyuden
JP1/AJS2オペレータ勉強会
JP1/AJS2オペレータ勉強会
mizuky fujitani
JSer Class #1
JSer Class #1
mizuky fujitani
Keypoints html5
Keypoints html5
dynamis
Vue.js入門
Vue.js入門
Takuya Sato
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Takuto Wada
Azure Service Fabric 概要
Azure Service Fabric 概要
Daiyu Hatakeyama
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Takuto Wada
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
Flux react現状確認会
Flux react現状確認会
VOYAGE GROUP
TypeScriptをオススメする理由
TypeScriptをオススメする理由
Yusuke Naka
Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介
CData Software Japan
Hello Java
Hello Java
Chihiro Ito
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
Vue.js with Go
Vue.js with Go
Kazuhiro Kubota
concrete5 の超便利アドオン Designer Content を極める!
concrete5 の超便利アドオン Designer Content を極める!
Katz Ueno
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
More Related Content
Viewers also liked
Web API入門
Web API入門
Masao Takaku
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
Hiroshi Kawada
JSer Class #3
JSer Class #3
mizuky fujitani
JSer Class #2
JSer Class #2
mizuky fujitani
One night Vue.js
One night Vue.js
Masahiro Kyuden
JP1/AJS2オペレータ勉強会
JP1/AJS2オペレータ勉強会
mizuky fujitani
JSer Class #1
JSer Class #1
mizuky fujitani
Keypoints html5
Keypoints html5
dynamis
Vue.js入門
Vue.js入門
Takuya Sato
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Takuto Wada
Azure Service Fabric 概要
Azure Service Fabric 概要
Daiyu Hatakeyama
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Takuto Wada
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Yasushi Kato
Flux react現状確認会
Flux react現状確認会
VOYAGE GROUP
TypeScriptをオススメする理由
TypeScriptをオススメする理由
Yusuke Naka
Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介
CData Software Japan
Hello Java
Hello Java
Chihiro Ito
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
健太 田上
Vue.js with Go
Vue.js with Go
Kazuhiro Kubota
Viewers also liked
(20)
Web API入門
Web API入門
SIMD.js(ECMAScript 7)
SIMD.js(ECMAScript 7)
JSer Class #3
JSer Class #3
JSer Class #2
JSer Class #2
One night Vue.js
One night Vue.js
JP1/AJS2オペレータ勉強会
JP1/AJS2オペレータ勉強会
JSer Class #1
JSer Class #1
Keypoints html5
Keypoints html5
Vue.js入門
Vue.js入門
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Azure Service Fabric 概要
Azure Service Fabric 概要
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
3日時間をもらったのでTypeScriptを触ってみた
3日時間をもらったのでTypeScriptを触ってみた
Flux react現状確認会
Flux react現状確認会
TypeScriptをオススメする理由
TypeScriptをオススメする理由
Web API を気軽に使えるツールやサービスのご紹介
Web API を気軽に使えるツールやサービスのご紹介
Hello Java
Hello Java
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
プログラミング初心者に ECMAScript(JavaScript) を最初の言語として勧めるべき? Meguro es6
Vue.js with Go
Vue.js with Go
Similar to xUnitハンズオン第2回テキスト
concrete5 の超便利アドオン Designer Content を極める!
concrete5 の超便利アドオン Designer Content を極める!
Katz Ueno
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
Kazuki Tsutsumi
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
Study Group by SciencePark Corp.
論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
Noritada Shimizu
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Kazumi IWANAGA
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Takeshi Komiya
Net fringejp2016
Net fringejp2016
Yusuke Fujiwara
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
拓将 平林
HoloLens RS4でWindowsML入門+Research mode実装
HoloLens RS4でWindowsML入門+Research mode実装
Akihiro Ueyama
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
Atushi Sugiyama
ChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かす
Daisuke Taniwaki
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
Naoto TAKAHASHI
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
Narami Kiyokura
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
Study Group by SciencePark Corp.
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Takeshi Komiya
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Yuichiro Saito
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
Kenichi Yoshida
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
kimulla
Similar to xUnitハンズオン第2回テキスト
(20)
concrete5 の超便利アドオン Designer Content を極める!
concrete5 の超便利アドオン Designer Content を極める!
高速!Clojure Web 開発入門
高速!Clojure Web 開発入門
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
SphinxのCIの続き Azure DevOpsでのビルド結果を、認証付きAzure App Serviceに公開するところまで
論理思考とプログラミング 2013f#10
論理思考とプログラミング 2013f#10
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Net fringejp2016
Net fringejp2016
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
Azureのサーバーレスで限界を超えよう~スマートスピーカースキル開発を題材に~
HoloLens RS4でWindowsML入門+Research mode実装
HoloLens RS4でWindowsML入門+Research mode実装
7/7 WordBench kobe dreamweaver seminar
7/7 WordBench kobe dreamweaver seminar
ChainerMNをDocker containerで動かす
ChainerMNをDocker containerで動かす
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
これ以上ソースコードの負債を増やさないためにVisual Studioの静的解析とAzure PipelinesでCIを回す
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
Microsoft DevOps Hackathon (Sep 2015) Team 4 Presentation
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
JAWS-UG三都物語 クラウドとデバイスが連携するアジェンダ
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
xUnitハンズオン第2回テキスト
1.
xUnitハンズオン xUnitフレームワークを通じた プログラミング&テスト・スキルUP
2.
はじめに 再掲
3.
開催概要 • 開催日時 • 2016/12/27
火曜17時 • 2016/1/5〜1/x 木曜17時 • 会場 • CS+Lync • 持ち物 • Visual Studio 2013もしくは2015 再掲
4.
テキストとサンプルコード • 社内の共有フォルダ • 後ほどメールで連絡させてもらいます。 •
SlideShare&GitHub • オンラインからも取得できるようにしておきます。 • SlideShare :http://www.slideshare.net/mizukyfujitani • GitHub :https://github.com/mizukyf 再掲
5.
目的 • プログラミング・スキルUP • C#/.NETの言語仕様を実践的に理解する •
LambdaやLINQといった「積極活用が望まれながら嫌煙されがち」な 事項のノウハウを得る • OOPにおけるモジュール化の「あるべき」を理解する • テスト・スキルUP • 「テストしにくいコード」をテストする工夫をできるようになる • 「テストしやすいコード」(≒品質高いコード)を意識したコーディ ングやレビューができるようになる 再掲
6.
そもそも前提として・・・ そこから一歩進んで • そもそも前提として • 「画面を突っつく」≠UT
という事実を理解する • 自分のプロジェクトでUTを実施する基礎知識を得る • そこから一歩進んで • ゆくゆくは"Hot Spot"(改修のたびに障害を起こす類のモジュール) の単体テスト製造および継続メンテナンスの体制を構築していきたい 「志が低い」と言われそうですが、A___システムやB___システム ではこれが限界なのではないかと考えています。。。 再掲
7.
ようするに • ハンズオンの目的は「UTを極める」ことにはない。 • UTを手段として自分たちのスキルUPするきっかけ提供。 •
自分のためのPlaygroundを手に入れたつもりで遊んでほしい。 • xUnitについてもっと知りたいという人は・・・ ? ? Javaneseな方は JSerな方は C#な方は TypeScriptな方は 再掲
8.
各回のコンテンツ(予定) 日付 会場 コンテンツ 2016/12/27
コラボレーション スペースN/E ハンズオンの開催概要、目的、 環境構築とはじめてのUTプロジェクト 2017/1/5 セミナールームX テストの書き方、アサーションの種類、セットアップ、 「別の方法で」実装してみよう 2017/1/12 コラボレーション スペースN/E 開発手法TDDの紹介、UTのイメージ転換、 「テストしやすい」インターフェースを作ろう 2017/1/19 セミナールームY IO、日時、乱数、privateフィールド、 あらゆる「副作用」を局所化しよう 2017/1/26 コラボレーション スペースW/S 予備回 再掲
9.
前回の振り返り
10.
前回の振り返り • Visual StudioでNUnitのテスト・プロジェクトをセットアップ し、実際にかんたんなテストを書いてみた •
そのなかでわかったこと: • テストを書くためにコードリーディング力が試されること • テストを書くために「別の方法で」実装する力が求められる(あそべ る)こと
11.
第2回 2017/01/05開催
12.
サンプル・ソリューションを開く • ハンズオン資料フォルダからZIPファイルをダウンロード • ZIPファイルを展開 •
VS2013もしくはVS2015でオープン 作業
13.
テストクラスのいろは
14.
ターミノロジー • 用語法はxUnitの種類と同じだけあるといっても過言でない。 • これ以降NUnitの用語法に基づき説明をする。 •
しかし同じような概念・同じような機能はxUnit系フレーム ワーク一般に存在する。
15.
ターミノロジー 用語 説明 Test Fixture
Class テスト・メソッドをカテゴリや対象クラスごとにまとめるためのクラ ス。 Test Method テストを実装するメソッド。正常系/異常系、引数の値域やその組み 合わせごとに分けて作るのが普通。 Set Up Method テストケース実行前のお決まりの準備作業を行うメソッド。 Dear down Method テストケース実行後のお決まりの事後処理を行うメソッド。
16.
ターミノロジー 用語 説明 Test Runner
NUnitやJUnitのテスト実行を司る実行ファイル。テストクラスやメ ソッドに付与されたメタ情報(AttributeやAnnotation)を読み取って 実行対象や実行方法を判断。その後メソッドを実行してアサーション の結果(テスト失敗を示す例外がスローされるかどうか)をまとめレ ポート出力する。 Mock アプリケーション内における本来の呼び出し先の代わりに、テスト対 象のメソッドなどから呼び出されるメソッドを提供するクラス。
17.
コンポーネント TestFixtureAttribute(必須) TestAttribute(必須) ※より高機能なAttribute で代替させることも可能。 Arrangeでテストに必 要な下準備を行う Assertで結果が満たす べき条件を記述する Actでテスト対象のメ ソッドを実行する
18.
作り方 ① TestFixtureクラスを作成 • 一般にはテスト対象クラス1つに就きTestFixtureクラスも1つ 作成(決まりはない) ②
SetUpメソッドを作成 • 個々のTestメソッドの前に都度かならず実行させたい処理があ る場合に作成 ③ TearDownメソッドを作成 • 個々のTestメソッドの後に都度かならず実行させたい処理があ る場合に作成 ④ Testメソッドを作成 • テスト対象クラスのメソッドやフィールドごと かつ 正常系/異 常系や引数の値域など条件ごとに作成(分け方に決まりはな い)
19.
Assertionの構文 • NUnitでは(JUnitでも)いくつかのAssertionの方式が用意さ れているが、もっとも新しく使い勝手も良いのは以下の形式: Assert.That( )結果値
, 制約 Action 戻り値のAssertion: Assert.That( ), 制約 例外スローのAssertion: 制約オブジェクトはIs,Has,Throwsなどの構文 ヘルパー(ユーティリティ)を使って作成でき る。
20.
指定クラスのTestFixtureをつくる 1. アプリケーションの仕様を確認(講師から説明) 2. サンプル・ソリューションZIPをダウンロード 3.
ZIPファイルを展開 4. Visual Studioでオープン 5. NuGetパッケージの復元(VS2013の手順は次項参照) 6. メイン・プロジェクト指定クラスに対応するTestFixtureク ラスを作成する 7. とりあえずテストを実行してみる ※すでにテスト・プロジェクトとプロジェクト間参照、Nunitな どの必要なアセンブリの参照追加は終わっている。 ※TestUtilityクラスについては後ほど説明。 作業
21.
VS2013 NuGetパッケージの復元 • ソリューション エクスプローラ上でソリューションを右ク リック→[NuGet
パッケージの復元の有効化]をクリック • 確認ダイアログが表示されるので[はい]をクリック • 再度ソリューションを右クリック→[ソリューションのNuGet パッケージの管理]をクリック • [復元]をクリック 参考
22.
もう少しAttribute
23.
TestAttributeのオプション テストの説明を記述出来る (レポートに使われるらしい) 期待される結果を記述して、メ ソッド戻り値と照合させられる ※詳細はAPIリファレンスを参照のこと:https://github.com/nunit/docs/wiki/Test-Attribute
24.
TestCaseAttribute • 引数セットを定義して、同じテスト・メソッドをセット数分自 動で繰り返し呼び出させる。 • 引数セットごとに、"ExpectedResult"を指定することも可能。 ※詳細はAPIリファレンスを参照のこと:https://github.com/nunit/docs/wiki/TestCase-Attribute テストをさせたい引数セットを Attributeとしていくつも指定可能
25.
ValuesAttribute • 引数ごとに値セットを定義して、値セット同士の総当りでテス トさせる。 ※詳細はAPIリファレンスを参照のこと:https://github.com/nunit/docs/wiki/Values-Attribute 引数ごとに取りうる値を指定してや ることができる
26.
SetUp/TearDownAttribute • Attributeを指定することで、個々のテスト・メソッドの事前事 後に必ず実行するべき処理を定義できる。 ※詳細はAPIリファレンスを参照のこと:https://github.com/nunit/docs/wiki/SetUp-Attribute, https://github.com/nunit/docs/wiki/TearDown-Attribute
27.
もっとAssertion
28.
もっともシンプルなAssertion メソッドの戻り値が満 たすべき条件を同値性 検証で表現 "Assert that result
is equal to expected value."
29.
Is構文ヘルパー • Isは単なる同値性の検証以外にも使用できる: • Is.EqualTo(x)
同値であること • Is.True/False true/falseであること • Is.Null nullであること • Is.NaN NaNであること • Is.GreaterThan(x) xより大きいこと • 条件は組み合わせることも出来る: • Is.GreaterThan(x).And.LessThan(y) • Is.Not.Zero.And.GreaterThan(x).And.LessThan(y)
30.
Has構文ヘルパー • コレクション(配列やリスト)の要素の値、値の範囲、要素の 数などに対する条件を組み立てることが出来る。 • 結果値のオブジェクトが持つ任意のプロパティの値に対する条 件を組み立てることも出来る。 コレクション(配列やリスト)の要素に関 する各種の条件を表現できる "Assert
that the array has some element equal to 2 and all of elements greater than 0."
31.
Throws構文ヘルパー • Throwsによりテスト対象のコードが例外を投げることを検証 できる。 • Throws.TypeOf<T>
まさにそのT型の例外 • Throws.InstanceOf<T> T型かそのサブ型の例外 "Assert that the action throws exception that instance of System.ArgumentException."
32.
実際に使ってみよう
33.
Throws構文ヘルパーを使う 1. テスト対象メソッドの仕様を確認 2. TestもしくはTestCaseAttribute付きのメソッドを作成 3.
メソッド内にThrows構文ヘルパーを使用したテストのロ ジックを記述する 4. テストを実行してみる 作業
34.
SetUpAttributeを使う 1. 作成済みのTestもしくはTestCaseAttribute付きのメソッド を見直し 2. 繰り返し登場する事前処理をメソッドに分離 3.
当該メソッドにSetUpAttributeを付与 4. テストを実行してみる 作業
35.
TestCaseAttributeを使う 1. テスト対象メソッドの仕様を確認 2. TestCaseAttribute付きのメソッドを作成 3.
メソッド内にテストのロジックを記述する 4. テストを実行してみる 作業
36.
Has構文ヘルパーを使う 1. テスト対象メソッドの仕様を確認 2. TestもしくはTestCaseAttribute付きのメソッドを作成 3.
メソッド内にHas構文ヘルパーを使用したテストのロジック を記述する 4. テストを実行してみる 作業
37.
まとめ
38.
まとめ • 今回のハンズオンでUTを作成するための部品について初歩的 知識を得た。 • 戻り値が特定の値であること、特定の範囲内であること、特定 の値を含むこと、例外をスローすること、などなどの条件(制 約)を使ってメソッドの仕様を表現できるようになった。 •
次回は・・・ • テストが可能になる条件 と、 • テストがしやすくなる条件 について。
39.
注意 • AttributeやAssertionには今回紹介しきれなかったものがまだ まだたくさんあります。 • 詳細はNUnitのAPIリファレンスや@IT、CodeZine、Qiitaのよ うな技術系情報サイトの記事を参照のこと。 •
xUnitのうちでもJUnitはNUnitと非常に似通ったAPIを提供して います。JUnitの場合はAttributeの代わりにAnnotationを使用 することになります。
Download now