1

Whiteboardビジネス ロジックをカプセル化するフレームワークがあります。私は依存関係を逆にして分離したままにしようとしているのでWhiteboard、リポジトリに依存しているため、 protocol を宣言し、リンクするクライアントがの実装を提供するWhiteboardRepositoryことを期待しています。WhiteboardWhiteboardRepository

これは、以下のスクリーン ショットで確認できます。クラスとそれ自身のテスト サブクラスWhiteboardTestsを含むグループにも注意してください。WhiteboardRepositoryTestsWhiteboardRepositoryFake

ここに画像の説明を入力

の実装が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()
}

もちろん、これWhiteboardRepositoryFakeTestsWhiteboardTestsバンドルに含まれているため、正常に機能WhiteboardRepositoryTestsWhiteboardRepositoryFakeTestsます。

問題は、リンクするアプリは、独自の実装をテストするWhiteboardために独自のサブクラスを作成する必要がありますが、テスト バンドルにアクセスできないため、クラスを認識せず、サブクラス化できないことです。 .WhiteboardRepositoryTestsWhiteboardTestsWhiteboardRepositoryTests

複数のクライアントがを消費しているため、クラスを各クライアントにWhiteboard単純にコピーすることはできません。理想的な世界では、のテスト バンドルをクライアントのテスト バンドルにリンクまたは挿入して、クライアントのテストに公開することができますが、これを行う方法がわかりません。WhiteboardRepositoryTestsWhiteboardWhiteboardRepositoryWhiteboardRepositoryTestsWhiteboardWhiteboardWhiteboardRepositoryTests

この障害を回避する方法はありますか? の実装が期待どおりに動作WhiteboardRepositoryTestsすることをクライアントが確認できるように、クライアント テスト バンドル内のテストに公開するにはどうすればよいですか?WhiteboardRepository

4

1 に答える 1