SwiftのテストクラスでObjective-Cのプライベートメソッドをテストする
この記事は Sansan Advent Calendar 2015の20日目です。
こんにちは。
2015年が終わろうとしている現在もObjective-Cで消耗している者です。
ちなみに2016年も絶賛消耗する見込みです。
地獄の業火に焼かれながら、それでもSwiftに憧れる
でもプロダクトコードに入れるにはちょっと(///
という訳でまずはユニットテストだけSwiftで書くことになりました。
ユニットテストだけSwiftで書く場合
普通にSwiftでテストクラスを追加し、
テストしたいObjective-CのクラスをBridging-HeaderでimportすればOKです。
以下はHogeObjcClassというObjective-CのクラスのisValidメソッドをテストしたい場合の例です。
/* Bridging-Header */ #import "HogeObjcClass.h"
/* Swiftで書いたテストクラス */ import XCTest class HogeObjcClassTests:XCTestCase { func testObjcMethod(){ XCTAssertTrue(HogeObjcClass.isValid()) } }
プライベードメソッドをテストしたい場合
で、ちょっとめんどくさいのがテストしたいメソッドがObjective-Cのクラスでプライベートな場合です。
そんな場合はHogeObjcClassのカテゴリを作成し、
/* プライベートメソッドテスト用のカテゴリ */ #import "HogeObjcClass.h" @interface HogeObjcClass (PrivateTest) + (BOOL)privateMethod; @end
さらにBridging-Headerで作ったカテゴリをimportします。
/* Bridging-Header */ #import "HogeObjcClass.h" #import "HogeObjcClass+PrivateTest.h"
こうしてあげるとSwiftのテストクラスでObjective-Cのプライベートメソッドが使えるようになります。
/* Swiftで書いたテストクラス */ import XCTest class HogeObjcClassTests:XCTestCase { func testObjcMethod(){ // プライベートメソッドが使える XCTAssertTrue(HogeObjcClass.privateMethod()) } }
新しくプロジェクト作る場合はおとなしくSwiftで書きましょうということで、、、