iPhoneユニットテスト(二)



Jan 16th Posted by z.cHris in macdev No comments TDDについて知らない方はTest-driven developmentを参考にしてください 本明細書で使用するObjective-CユニットテストフレームワークはOCUnitであり、最新のXcodeはすでに含まれている。 TDDの手順は次のとおりです。 ある機能をテストするユニットのテスト例を書く。 実行、テストに失敗しました。 符号化実現機能; ユニットテストを実行し、テストが成功するまでコードを変更します。 再構築コード; 再構成ユニットのテスト例; 1を繰り返します。 このうち5、6はオプションのステップであり、必要に応じて行われますが、製品コードとユニットテストの使用例が同時に変更されないことを保証する必要があります。 簡単な例 簡単な貯蓄口座管理を実現します。 プロジェクトの作成 TddDemo (iOS Window-based Application). Xcodeテンプレートでは、デフォルトでTddDemoのtargetが生成されます。これはsimulator上を走っています。新しいtarget Test、メニューproject->new target->Cocoa->Unit Test Bundleを追加する必要があります。具体的な設定はこのブログを参考にすることができます。 テストCase クラスの作成_SavingAccountTest、targetはTestを選択します。OCUnitを使用するにはimportヘッダファイルSenTestingKitが必要です。h、SenTestCaseを継承し、テストメソッド名はtestで始まる必要があります。 コードは以下の通りです。お金を貯める必要があります。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 // _SavingAccountTest.h #import < foundation /Foundation.h > #import < sentestingkit /SenTestingKit.h >   @interface _SavingAccountTest : SenTestCase {   } @end   // _SavingAccountTest.m #import "_SavingAccountTest.h"   @implementation _SavingAccountTest   - (void)testDeposit { SavingAccount *account = [[SavingAccount alloc] init]; [account deposit:100]; STAssertEquals(100, [account balance], @"bad balance 100 != %d", [account balance]); [account release]; }   @end 実行、テストに失敗しました 機能実装 最も簡単な方法でテストを通過させます。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 // SavingAccount.h #import < foundation /Foundation.h >   @interface SavingAccount : NSObject {   }   - (void)deposit:(int)money; - (int)balance;   @end   // SavingAccount.m #import "SavingAccount.h"   @implementation SavingAccount   - (void)deposit:(int)money {   }   - (int)balance { return 100; }   @end 実行、テスト成功 次のCase では、お金を引き出すとどうなりますか。 testDeposit関数を次のように変更します。 1 2 3 4 5 6 7 8 9 // _SavingAccountTest.m - (void)testDepositAndWithdraw { SavingAccount *account = [[SavingAccount alloc] init]; [account deposit:100]; [account withdraw:50]; STAssertEquals(50, [account balance], @"bad balance 50 != %d", [account balance]); [account release]; } 実行、テストに失敗しました SavingAccountは空のメソッドwithdrawを追加してコンパイルを通過させます。 機能実装 SavingAccount interface属性balanceを追加し、以下のように変更します。 1 2 3 4 5 6 7 8 9 10 11 12 // SavingAccount.m - (void)deposit:(int)money { balance += money; }   - (void)withdraw:(int)money { balance -= money; }   - (int)balance { return balance; } 実行、テスト成功 新しいCase 銀行預金口座は貸越できません。t e s t NegativeBalanceIsNotFineを追加します。 1 2 3 4 5 6 7 8 9 // _SavingAccountTest.m - (void)testNegativeBalanceIsNotFine { SavingAccount *account = [[SavingAccount alloc] init]; [account deposit:50]; [account withdraw:100]; STAssertEquals(0, [account balance], @"balance can't be negative 0 > %d", [account balance]); [account release]; } 実行、テストに失敗しました 実装の変更 1 2 3 4 5 6 - (void)withdraw:(int)money { balance -= money; if (balance &lt; 0) { balance = 0; } } 実行、テスト成功 リファクタリング このとき、テストの2つのcaseの中で1つのSavingAccountをインスタンス化することがわかります。コードを繰り返し、抽出することができます。setupとtearDownに入れます。この2つの方法はそれぞれtestの最初と最後に実行されます。 1 2 3 4 5 6 7 8 // _SavingAccountTest.m - (void)setUp { account = [[SavingAccount alloc] init]; }   - (void)tearDown { [account release]; } 実行、テスト成功 続行... UTとTDD 人月神話は昔からNo、silver bullet、TDDも; UTは時間コストがかかるのでROI(Return on Investment)を考慮すると、UIインタラクティブユニットのテストコストが高いなど、やらなくてもいいシーンもありますが、ほとんどのシーンではUTを作るだけで、いつも良いROIがあります。 カバー率を追求しないでくださいが、少なくとも各バグはUTでカバーしなければなりません。 cocoa, objc, tdd Hello,From org 2 blog Jan 13 th Posted by z.cHris in emacs No comments以前作为Emacs的blog扩张weblog使用了weblog,但没有什么力度,设定的公寓为什么再次接续,每次url必须加入,所以没有使用过。我也打算再找到这个扩张,试试一下.Org 2 blog可以直接向wordpress博客公开org-mode制作的blog.ダウンロード:git clonehttp://github.com/punchagan/org2blog.git虽然使用很简单,但首先追加了下一块.Emacs,路线选择了自己设置org 2 blog的地方.1 2 (add-to-list 'load-path "~/Dropbox/Emacs/emacs.d/org2blog/") (require'org 2 blog)然后追加blog 1 2 3 4 5 6 7 8 9 10 (setq org2blog-blog-alist '(("zhengdong.me" :url "http://zhengdong.me/xmlrpc.php" :username "test") ("wordpress" :url "http://username.wordpress.com/xmlrpc.php" ::username "username" :default-title "Hello World" :default-categories ("org2blog" "emacs") :tags-as-categories nil))上的设定中追加了2个blog.meとwordpress.M-x如果加入org 2 blog-后tab的话,可以表示许多选择的漫画.首先使用org 2 blog-login,blog?ヒントを与える前设定的blog名,加入zhengdong.我又在wordpress中,被要求进力,继续成功,使用org 2 blog-new-entry开始了blog的书き込み.这个blog使用org 2 blog.————上记lisp code在后面加上,用org 2 blog直接使用html的方法,例如需要加上这个标题的方法,我们不知道。—————上记的问题已经解决啦。org-mode,如果有必要加入htmlタグ的话,就可以在タグ前附上@.复杂的标志可以使用html标志.如下所示.1.@(end-of-line) @2. #+BEGIN_HTML (end-of-line) #+END_HTML変換元:http://zhengdong.me/?m=201101