はじめに
Objective-CのXCTestについてです。
プライベートメソッドをテストする方法を書きます。
プライベートメソッドをテストするには?
パブリックメソッドはテストケースクラスに対象クラスをimportしてあげればテストできますね。
ModelTests.m
#import "Model.h"
ModelTestsはこれだけでModelクラスのパブリックメソッドをテストをできるようになります。
しかし、これだけだとプライベートメソッドのテストができません。
プライベートメソッドもテストしたいのでカテゴリを書きましょう!
テストケースクラスにカテゴリを書いて、テスト対象のプライベートメソッドを宣言してあげればいいんです。
ModelTests.m
#import "Model.h"
@interface Model (PrivateMethods)
- (NSString *)privateMethod;
@end
こんな感じにカテゴリを書いてあげることでプライベートメソッドもテストできます!
テストしてみる
テスト対象
テスト対象はこんな感じ。
パブリックメソッド1つ、プライベートメソッド1つです。
Model.h
#import <Foundation/Foundation.h>
@interface Model : NSObject
- (NSString *)publicMethod;
@end
Model.m
#import "Model.h"
@implementation Model
- (NSString *)publicMethod {
NSString *string = @"publicですよー。";
return string;
}
- (NSString *)privateMethod {
NSString *string = @"privateですよー。";
return string;
}
@end
テストコードを書いてみる
- (NSString *)publicMethod
と- (NSString *)privateMethod
の
テストコードを書いてみましょう。
ModelTests.m
#import <XCTest/XCTest.h>
#import "Model.h"
// プライベートメソッドのカテゴリ
@interface Model (PrivateMethods)
- (NSString *)privateMethod;
@end
@interface ModelTests : XCTestCase
@property (nonatomic)Model *model;
@end
@implementation ModelTests
- (void)setUp {
[super setUp];
self.model = [Model new];
}
- (void)tearDown {
[super tearDown];
}
#pragma mark - PublicMethods
- (void)testPublicMethod {
XCTAssertEqualObjects([self.model publicMethod], @"publicですよー。");
}
#pragma mark - PrivateMethod
- (void)testPrivateMethod {
XCTAssertEqualObjects([self.model privateMethod], @"privateですよー。");
}
@end
こんな感じでプライベートメソッドのテストコードも書くことができます!
さいごに
カテゴリを書いて、宣言してあげるだけでパブリックメソッドと同様にテストすることが可能なので
プライベートメソッドもテストしてあげましょう!