29
26

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.

プライベートメソッドのテスト

Last updated at Posted at 2014-04-07

個人的に、あまり細かすぎる単位でテストを書くのはお勧めしませんが、
時にはプライベートメソッドのテストが書きたい時もあります。
しかし、ヘッダファイルに宣言していないプライベートメソッドは、
そのままではテストクラスから参照することが出来ません。

例えば以下のようなクラスについて

PrivateClass.m

#import "PrivateClass.h"

@interface PrivateClass ()

@end

@implementation PrivateClass

/** Private Method */
- (BOOL)privateMethod:(BOOL)flag
{
	return flag;  // 例なので適当です
}

@end

このprivateMethodをテストクラスから呼び出すためには、
テストファイルの方にPrivateClassのCategoryを書き、
privateMethodを宣言し直します。

PrivateClassTests.m

#import <XCTest/XCTest.h>
#import "PrivateClass.h"

// PrivateClassのCategory
@interface PrivateClass (PrivateTest)

- (BOOL)privateMethod:(BOOL)flag;  // プライベートメソッドを宣言

@end

@interface PrivateClassTests : XCTestCase

- (void)testPrivateMethod;

@end

@implementation PrivateClassTests

- (void)testPrivateMethod
{
	PrivateClass* pc = [[PrivateClass alloc] init];

	XCTAssertTrue([pc privateMethod:YES], @""); // テストできる
	XCTAssertFalse([pc privateMethod:NO], @""); // テストできる
}

@end

冒頭にも書きましたが、個人的には細かすぎる単位でテストを書くのはお勧めしません。

テストは非常に有益ですが、テストを書くことに時間を取られすぎたり、
テスト対象の変更に追随するためのメンテナンスコストが肥大化するなど
費用対効果が合わなくなるリスクも考えられます。

本当に意味のあるテストなのか吟味した上で、計画的にテストを書きましょう。

29
26
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
29
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?