TOKOROM BLOG

iOSとかVimとかその他日々の雑多な技術情報

Objective-Cのテストクラスからプライベートメソッド/プロパティを参照したい はてなブックマーク - Objective-Cのテストクラスからプライベートメソッド/プロパティを参照したい

Permalink

dkfjさんが Objective-Cで、プライベートメソッド・プロパティにアクセスし、ユニットテストを実行する方法 という記事を書かれていました。

せっかくなので私がやっている方法も書かせていただきます。

テスト対象のクラス

以下のようにプライベートメソッドとプロパティを持ったExampleClassをテストするとします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import "ExampleClass.h"

@interface ExampleClass()
- (BOOL)privateMethod;
@property (assign) BOOL flag;
@end

@implementation ExampleClass

- (BOOL)privateMethod
{
  return self.flag;
}

@end

テストクラス

自分の場合は、こんなかんじでテストクラスでテスト対象のプライベートメソッドやプロパティを宣言し直して使ってます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#import <GHUnitIOS/GHUnit.h> 
#import "ExampleClass.h"

@interface ExampleClass (Private)
- (BOOL)privateMethod;
@property (assign) BOOL flag;
@end

@interface ExsampleClassTest : GHTestCase
@end

@implementation ExsampleClassTest

- (void)testPrivateMethod
{
  ExampleClass* example = [ExampleClass new];
  GHAssertFalse([example privateMethod], nil);
  example.flag = YES;
  GHAssertTrue([example privateMethod], nil);
}

@end

メリットとデメリット

メリット

  • プライベートメソッドを(テストクラス以外からは)プライベートなまま保てる

デメリット

  • 本体のほうのメソッドが変わったらテストクラスのほうの宣言も書き直す必要がある

Comments