speakerdeck.com 日本で開催されるもっとも大きなiOSに関するカンファレンスの1つであるTop | iOSDC Japan 2017に参加し、表題の内容で発表しました。 聴いてくださった方々からは好評のようでよかったです。発表資料は本題と関係のない話がちょこちょこ挟まったり、口頭の説明がないとわからないページがあり、スライドだけでは意図がよく伝わらない恐れがあるので、こちらで内容について補足します。 伝えたかったテーマは「依存が大きく複雑で、単体でテストしづらいコードを単体で動かしてテストできるようにするには」ということです。その題材として一般的に依存が複雑でテストしづらいコンポーネントであるビューを例として取り上げました。ですのでビューやUIをテストするということに絞った話ではなく、どのレイヤーに対しても複雑にいろいろな依存関係があってユニットテストが書けないという状況を改
About the content This talk was delivered live in September 2016 at try! Swift NYC. The video was recorded, produced, and transcribed by Realm, and is published here with the permission of the conference organizers. Unit tests are a challenge to write. “Did I think of every relevant case?” is an almost impossible question to answer. Fortunately, we have the tools to help find more relevant cases w
昨年に続き、3月2〜3日に開催されたtry! Swift Tokyo 2017に行ってきました。 テスト系のセッションが3つあったので、それらについてまとめます。 今年は海外からを含め700人を越える参加者があり、会場になったベルサール新宿セントラルパークの広いホールもこんな感じ(会場の2/3あたり後方から撮影)。 クックパッドアプリのテストを味わう - Tasting tests at Cookpad 初日、クックパッドの松尾さん(@Kazu_cocoa)の講演。全て英語でのプレゼンでした。すごい。 20170302 tryswift tasting_tests from Kazuaki Matsuo www.slideshare.net このセッションでは、UIのテストについて、UIのテストがクックパッドの開発をどうサポートしているかについて語られました。スライドには"Tests"とだ
twitter.com 関数を完全にテスト可能にするためのものが2つあります。作用の分離と共作用を表面化です。この2つの側面の背景にある理論を探り、どのようにすればテスト容易なコードに導けるかを示します。また、最近オープンソース化されたコードベースを基にKickstarterで我々がどのように実践しているかも紹介します。 テスト可能なコードを書くということの2つの側面 テストについて深く話します テスト可能なコードを書くには?それは表裏をなすものです。 そして関数言語を例にとって、キックスターターで我々がやっていることをお話します。OSSにしたのでみてもらえます。 Contact Me! なぜテストをするか。経験と方法について知ることが必要 潜在バグを潰せたりして良い。先人たちが色々言っている。 私自身コードを書く時に関数的な書き方で書くことは良い試練だと思う。 実装のためにコードを書くの
XCTestとは iPhoneの単体テスト用のフレームワークです。 Xcodeでプロジェクトを生成した時にデフォルトで生成されます。 XCTestの使い方 テストの場所 ナビゲーターを見ると、プロジェクト名+Testsというグループが作られている事が分かります。 テストはこの中のファイルに記述していきます。 テストの実行方法 デフォルトで作られるテストファイルは下のようになっています。 まずはこのテストを実行してみようと思います。 import UIKit import XCTest class MyTestTests: XCTestCase { override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test meth
Ash Furrow iOSエンジニアおよび著者としてArtsyで働くカナダ人です。多くのアプリを開発し、これまで4冊の書籍を出版しています。また、オープンソースのコントリビューターとしてコミュニティに関わっています。ブログでは、興味深いプログラミングのネタからフィルムカメラにまでおよぶ様々なトピックを扱っています。 twitter.com Artyは4つのiOSアプリケーションを提供しています。すべてオープンソースとして公開しています。そしてすべて異なるアプローチを用いてテストされています。なぜでしょうか?それぞれ異なるテスト手法を用いることは、異なる環境においてうまく動くからです。ArtsyのiOSチームの判断の裏付けとなった議論や、どんな問題にあたり、どのように課題を解決したのかを紹介します。すばらしいソフトウェアを作るために、なぜテストが重要なのかをより理解できるようになるでしょう
Swift が opensource 化されてもう一月以上。みなさんテストはどうされてますか? もちろんこの場合XCTestなんてチャラいものは使えません。Linux版にSwift自体はあってもXcodeなんてありませんから。 というわけで、私はずっとTest Anything Protocolを使ってきました。 発祥はPerl Communityですが、別にPerlでなくても使えます。例えばJSの世界ではよく使われているmochaも対応してますし、TAP適合の出力であれば、それをチェックするためのスクリプトproveは、Perlが入っている環境であれば必ず入っているのでOS XとLinux Distroの過半では out-of-box で使えます。 見てのとおりシンプルなものなので、その場で都度実装してもいいですし実際そうしてきたのですが、ずいぶんとSwiftのプロジェクトも増えたので、
I’ve become a fan of creating one’s own test doubles (aka mock objects) instead of using a mock framework like OCMock or OCMockito. Uncle Bob describes this process in one of his Clean Code videos, and it seems to work very well in Swift. Why create your own mock objects? There are a couple reasons for doing this. Tests can be more readable. I say “can” because its really up to you to create reada
Mar 20, 2015 Objective-Cではテストケース毎にオブジェクトの一部だけ挙動を変えたい場合に、OCMockなどのライブラリを使うのが普通でした。 それらのライブラリはNSInvocationやMethod Swizzlingなどを使ったいわゆる魔術的なコードで実現されていることが多く、 “テストコードを書いているのによくわからんコードが動いてる!”ってなってモヤモヤしたりします。 一方、Swiftではmanual mockingという手法が取られたりするみたいです。 例えば、 class Object { var foo: String { return "foo" } var bar: String { return "bar" } } class ObjectTests: XCTestCase { func testFoo() { class ObjectMock:
Quickとは? QuickはSwiftが発表された2日後にGithubにコミットされた、世界で一番最初のSwiftのテストフレームワークです。ビヘイビア駆動開発(BDD)指向のテストフレームワークで、SwiftとObjective-Cの両方の言語に対応しています。RSpec, Specta, Ginkgoの影響を受けているそうで、記述がしやすく可読性の高いケースを表現できるのが特徴です。 ロゴもSwift調のデザインで素敵です。 開発者は? 開発者はmodocache (もどかしい)さんという日本にいらっしゃるエンジニアさんが作られています。ハンドルネームがとってもお洒落ですね。 期待度は? まだ開発開始から2週間弱ですが、とても活発に開発が行われており今後Swiftのデファクトテストフレームワークになるのではと期待が寄せらています。 また既存のObjCテストフレームワーク(※)はSwi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く