私は最近Objective-Cを学び、XcodeにバンドルされているOCUnitを使ってテストを書いています。Objective-CのBDD
私は長い時間Rubyプログラマーです。私はRSpecとCucumberに慣れています。素敵なBDDフレームワークです。
Objective-Cで使用する適切なBDDフレームワークはありますか?私は私の 'をすべきではありません::)あなたのテストメソッドの接頭辞を止めることは何もありません。
私は最近Objective-Cを学び、XcodeにバンドルされているOCUnitを使ってテストを書いています。Objective-CのBDD
私は長い時間Rubyプログラマーです。私はRSpecとCucumberに慣れています。素敵なBDDフレームワークです。
Objective-Cで使用する適切なBDDフレームワークはありますか?私は私の 'をすべきではありません::)あなたのテストメソッドの接頭辞を止めることは何もありません。
RSpecのテスト用DSLに触発されたuispecという比較的新しいプロジェクトがあります。サンプルの仕様は次のようになります。
#import "DescribeEmployeeAdmin.h"
#import "SpecHelper.h"
@implementation DescribeEmployeeAdmin
-(void)before {
//login as default admin before each example
[SpecHelper loginAsAdmin];
}
-(void)after {
//logout after each example
[SpecHelper logout];
}
-(void)itShouldHaveDefaultUsers {
//Check that all default users are in list
[[app.tableView.label text:@"Larry Stooge"] should].exist;
[[app.tableView.label text:@"Curly Stooge"] should].exist;
[[app.tableView.label text:@"Moe Stooge"] should].exist;
}
-(void)itShouldAddAUser {
//Click the + button
[app.navigationButton touch];
//Set the form fields.
//Also ".with" is optional so we here we can show the different syntax
[[app.textField.with placeholder:@"First Name"] setText:@"Brian"];
[[app.textField.with placeholder:@"Last Name"] setText:@"Knorr"];
[[app.textField.with placeholder:@"Email"] setText:@"[email protected]"];
[[app.textField placeholder:@"Username"] setText:@"bkuser"];
[[app.textField placeholder:@"Password"] setText:@"test"];
[[app.textField placeholder:@"Confirm"] setText:@"test"];
//Click the Save button
[[app.navigationButton.label text:@"Save"] touch];
//Make sure the error alert view doesn't appear
[app timeout:1].alertView.should.not.exist;
//User list should now have a new entry
[[app.tableView.label text:@"Brian Knorr"] should].exist;
}
@end
私は決してそれを使用していないことに注意してください。あなたのニーズに正確に合致しない可能性があります。しかし、少なくともあなたは、独自のテストフレームワークを書くためのインスピレーションとしてコードベースを使用することができます。
私はC#のNUnitでそれをしました。
私が後にしているのは、検証のための具体的な構文です。 Rubyでは、次のようになります。 method_under_test(args).should be_valid –
質問をしている人は、Objective-CとOCUnitについて、テストメソッド自体が "test"で始まることを期待しています。つまり、どのメソッドがテストであるかを知る方法ですObjective-CにはC#やJavaなどのアノテーションはありません。 –
STAssert
OCUnit(SenTestingKit、Xcodeに含まれています)のマクロがどのように実装されているかを見てください。
ユニットテストバンドルでは、NSObject
にカテゴリを実装して、-shouldBeValid
のようなメソッドを追加し、今度はSTAssert
マクロと同じ合格/失敗の機種を呼び出すことができます。あなたがCプリプロセッサと密接に慣れていない場合は
...
あなたはおそらくも__FILE__
と__LINE__
あなたのBDDのテストのために正しい値を通過するように、あなたのマクロの#define
を使用する必要があります失敗します。
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
:コンパイラは、見ているコードは、このなります
[[someObject methodUnderTest:argument] shouldBeValid];
:あなたはこのようにそれを呼び出します。そのように
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
:たとえば、あなたはこのような何かをする必要がある場合があります
__FILE__
と__LINE__
のプリプロセッサマクロは、テストソースファイル内の現在のファイルと行に展開されます。
このようにして、失敗したテストがある場合、適切な情報をSenTestingKitに渡してXcodeに送り返すことができます。失敗は[Build Results]ウィンドウに正しく表示され、クリックするとテストの失敗の正確な場所に移動します。
Pivotal LabsのAdam Milliganは、Objective-C用のBDDフレームワークを作成しました。Cedarは、CocoaとCocoa Touchの両方を対象としています。 RSpecと同様の方法でブロックを使用します。 、私は統合するクイックKiwi Libraryを使用してい
SPEC_BEGIN(FooSpecs)
sharedExamplesFor(@"a similarly-behaving thing", ^(NSDictionary *context) {
it(@"should do something common", ^{
...
});
});
NSDictionary *context = [NSDictionary dictionary];
describe(@"Something that shares behavior", ^{
itShouldBehaveLike(@"a similarly-behaving thing", context);
});
describe(@"Something else that shares behavior", ^{
itShouldBehaveLike(@"a similarly-behaving thing", context);
});
SPEC_END
かなりうまく機能:ここでは例の仕様です。their githubから
:
describe(@"Team", ^{
context(@"when newly created", ^{
it(@"should have a name", ^{
id team = [Team team];
[[team.name should] equal:@"Black Hawks"];
});
it(@"should have 11 players", ^{
id team = [Team team];
[[[team should] have:11] players];
});
});
});
あなたはひょうたんを使った例を参照してくださいよBDD From the idea to the appを見てみることができます。
プロジェクトはアクティブで、必要なもののように見えます。ありがとう! –
ありがとう、これは非常にいいです。 –