Whiteboard
ビジネス ロジックをカプセル化するフレームワークがあります。私は依存関係を逆にして分離したままにしようとしているのでWhiteboard
、リポジトリに依存しているため、 protocol を宣言し、リンクするクライアントがの実装を提供するWhiteboardRepository
ことを期待しています。Whiteboard
WhiteboardRepository
これは、以下のスクリーン ショットで確認できます。クラスとそれ自身のテスト サブクラスWhiteboardTests
を含むグループにも注意してください。WhiteboardRepositoryTests
WhiteboardRepositoryFake
の実装がWhiteboardRepository
期待どおりに動作することを確認するために、WhiteboardTests
テスト バンドルは のWhiteboardRepositoryTests
サブクラスを定義しXCTestCase
ます。
class WhiteboardRepositoryTests: XCTestCase {
var repo: WhiteboardRepository?
override func setUp() {
if let repo = repo {
// test setup here
}
}
// test cases here
}
のクライアントが のWhiteboard
実装をテストするWhiteboardRepository
ために、実装のテスト クラスは をサブクラス化し、WhiteboardRepositoryTests
実装のインスタンスをテスト サブクラスに提供します。テスト サブクラスは、テストの実行時にそのインスタンスを使用します。
たとえば、次のWhiteboardRepositoryFakeTests
ようになります。
class WhiteboardRepositoryFakeTests: WhiteboardRepositoryTests {
override func setUp() {
repo = WhiteboardRepositoryFake()
super.setUp()
}
// the test classes run, using the instance of WhiteboardRepositoryFake()
}
もちろん、これWhiteboardRepositoryFakeTests
はWhiteboardTests
バンドルに含まれているため、正常に機能WhiteboardRepositoryTests
しWhiteboardRepositoryFakeTests
ます。
問題は、リンクするアプリは、独自の実装をテストするWhiteboard
ために独自のサブクラスを作成する必要がありますが、テスト バンドルにアクセスできないため、クラスを認識せず、サブクラス化できないことです。 .WhiteboardRepositoryTests
WhiteboardTests
WhiteboardRepositoryTests
複数のクライアントがを消費しているため、クラスを各クライアントにWhiteboard
単純にコピーすることはできません。理想的な世界では、のテスト バンドルをクライアントのテスト バンドルにリンクまたは挿入して、クライアントのテストに公開することができますが、これを行う方法がわかりません。WhiteboardRepositoryTests
Whiteboard
WhiteboardRepository
WhiteboardRepositoryTests
Whiteboard
Whiteboard
WhiteboardRepositoryTests
この障害を回避する方法はありますか? の実装が期待どおりに動作WhiteboardRepositoryTests
することをクライアントが確認できるように、クライアント テスト バンドル内のテストに公開するにはどうすればよいですか?WhiteboardRepository