4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

xctest+ocmock

Posted at

最近テストコード書くのにはまってます
今日もテストコードのエントリーです

今回は自分のこくばんアプリでテストしてみました
黒板アプリはこちら

https://itunes.apple.com/jp/app/kokuban-pro/id818934135?l=ja&ls=1&mt=8
https://itunes.apple.com/jp/app/kokuban/id453329779?l=ja&ls=1&mt=8

xctestの特徴(自分のイメージ)
・xcode5から登場したもの
・ios7向けに作られた??ので、depoloyment targetをios6にしてると使えない
・TDD用フレームワーク

かな。他のTDDを使ってるなら、これをわざわざ使う必要はないかと思うけど、どうなんですかね
BDDを使うなら、Kiwiですかね

ocmockはまだ、テスト用のダミーオブジェクトのこと

ocmockはcocoapods使った
プロジェクト以下にファイルを配置

server:kokuban20131005 shiratsu$ cat Podfile
platform :ios, '7.0'

target :kokuban20131005Tests, :exclusive => true do
   pod 'OCMock'
end
pod install

でocmockは入るはず
とりあえずocmockで作りまくる

こんな感じになってる

# import <XCTest/XCTest.h>
# import "OCMock.h"
# import "ViewController.h"
# import "DrawingView.h"

@interface ViewControllerTests : XCTestCase

@end

@implementation ViewControllerTests{
    ViewController *vc;
    id mockelaser;
    id mockchook1;
    id mockchook2;
    id mockchook3;
    id mockchook4;
    id mockchook5;
    id mockmenu;
    id mockcurdraiwingview;
    id mockpastdraiwingview;
    
}

- (void)setUp
{
    [super setUp];
//    
    //UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    //vc = [storyboard instantiateViewControllerWithIdentifier:@"kokuban_iphone"];
    vc = [[ViewController alloc] init];
    
    //とりあえず、モックを作りまくる
    mockelaser = [OCMockObject mockForClass:[UIButton class]];
    mockchook1 = [OCMockObject mockForClass:[UIButton class]];
    mockchook2 = [OCMockObject mockForClass:[UIButton class]];
    mockchook3 = [OCMockObject mockForClass:[UIButton class]];
    mockchook4 = [OCMockObject mockForClass:[UIButton class]];
    mockchook5 = [OCMockObject mockForClass:[UIButton class]];
    mockmenu    = [OCMockObject mockForClass:[UIButton class]];
    mockcurdraiwingview    = [OCMockObject mockForClass:[DrawingView class]];
    mockpastdraiwingview    = [OCMockObject mockForClass:[DrawingView class]];
    vc.chook1 = mockchook1;
    vc.chook2 = mockchook2;
    vc.chook3 = mockchook3;
    vc.chook4 = mockchook4;
    vc.chook5 = mockchook5;
    vc.menu = mockmenu;
    vc.curDrawingView = mockcurdraiwingview;
    vc.pastDrawingView = mockpastdraiwingview;
    //[self.vc performSelectorOnMainThread:@selector(loadView) withObject:nil waitUntilDone:YES];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown
{
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    vc = nil;
    [super tearDown];
}

- (void)testExample
{
    //XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
    XCTAssertTrue(TRUE);
}

- (void)testViewController1
{
    XCTAssertTrue(TRUE);
    NSLog(@"%@",vc);
    id mock = [OCMockObject niceMockForClass:UIImage.class];
    BOOL boolWriteFile = [vc writeImage:mock toFile:@"test"];
    NSLog(@"writeval:%d",boolWriteFile);
    
    XCTAssertTrue(boolWriteFile);
}

- (void)testViewWillAppear
{
    [vc viewWillAppear:YES];
    NSLog(@"vc.kokubanMode:%d",vc.kokubanMode);
    XCTAssertTrue(vc.kokubanMode);
}

まだ一番したのテストしか試してない(成功した)
ッて感じでゴリゴリ試していこうと思います。

おかしなところがあれば指摘ください。
ソースは全部出来たら、githubにあげようかな

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?