0

これは一般的な質問ではなく、特定の問題ではありますが、将来同様の問題が発生した場合に役立つことを願っています。IdentityServer4の統合テストを実装する方法は?

私は当初、公開APIアクセスの認証と認可を設定するビジネスケースでIdentityServer4を実装しています。そのために、最初はClientCredentialsフローのみを使用します。使用フローを手動でテストし、正しい設定とセットアップを行うために、ドキュメントのサンプルプロジェクトのように、小さなテストAPIとクライアントコンソールアプリケーションを作成しました。しかし、私はIdentityServer4の設定をほぼ完了し、実際のAPI自体の作業を開始するので、自動化したいと思います。

基本的に私はIdentityServerの実装に対していくつかの統合テストを行いたいと思っています。しかし、私はこのトピックに関する経験がほとんどないので、セットアップの方法に関するヒントやヒントがあります。

少なくともいくつかのエンドポイントが既に完了している場合は、API側で設定する必要がありますか?しかし、私のIdentityServerとAPIが異なるソリューションにある場合、たとえばローカルでこれらのテストを実行する場合、IdentityServerを手動で起動し、それに接続するAPIプロジェクトでテストを実行する必要があります。

また、私にとっては、IdentityServerプロジェクトでテスト、テストAPI、およびクライアントを使用する方が意味があります(ソースコードソリューションと同じです)。しかし、ソースコードの統合テストを見ると、IdentityServerを起動するためのStartupクラスが別々にあることがわかりました。これを同様に行うか、自分のIdentityServerプロジェクトのStartupクラスに対してテストを実行するように設定する必要がありますか?次に、私はすべてのappSettingsファイルなどをコピーする必要があります。

私はそれがかなり一般的な質問とトピックだと知っていますが、実際の正しいことをテストする方法については、私はそれがソースコードのソリューションでも行われているので、機能自体についてたくさんテストする必要はないと知っていますが、自分の設定などをテストするための統合テストを用意しています。お互いに、私はすぐに知っていただろう。

ありがとうございます!

答えて

1

私はほとんどあなたの考えに同意します。

私はIdentitySereverプロジェクトを開始する前に、here on StackOverflowという質問をしました。これは@Lutandoによって答えられました。そして、4人のユーザーがこれを上書きしました。(質問はありませんでしたが)とにかく、私たちはプロジェクトの承認テストと統合テストを少ししか追加していません。this threadをチェックして、それは、より理にかなって、このテスト

の種類や私のためには、(それがソースコードの溶液中の 行われているのと同じ方法で多く)​​IdentityServerプロジェクトのテスト、テストAPIと クライアントを持っています。しかし、ソースコード の統合テストでは、 IdentityServerの起動時に別々のStartupクラスがあることがわかりました。これを同様に行うか、むしろ Startupクラスに対して実行するように設定する必要があります私自身のIdentityServer プロジェクトの?

私たちがどのようにこのことを私たちの会社で進めているのかは分かります。私たちのアイデンティティサーバーはHybrid Flow(mvc app、win app、rest APIのみを認可する)を扱うので、いくつかのサンプルプロジェクトを作成して、TestsServerで実行します。 IdentityServerのStartupクラスには、データをシードしてメモリデータベースに接続できるようにいくつかの仮想メソッドがあります。各テストはメモリ内に独自のデータベースを作成します

とにかく、これらのテストは非常に上手く行っています。管理インターフェースを使用してIdentityServerの実装を完了するまでに7ヵ月かかりましたが、間違った実装を指摘していました。 これらのテストは通常​​

努力する価値がある最後に、私は統合テストは、長い時間を取っているので、テストの同じ種類を重複しないよう

  • IdS4

    を開発しながら、私が発見したいくつかのことを指摘したいと思います。
  • あなたの質問で言及したように、IdentityServer4ソースはすでにコードを正しくテストしているので、identityServer4の動作方法をテストする必要はありません。成功した接続部分をテストするだけです。
  • それはリダイレクトとクッキー最後に
  • で動作するようにaccess_tokenはまたはidentityToken
  • 使用browser clientとアサートをテストすることは困難である、それは困難であり、時間このように統合テストを書くことがかかります。私はあなたがそれらを使用して統合テストを書くことは、セレン/コード化されたUIまたは同様のツールとfamilier優れているならば、私たちはただ、しかしプロジェクト

との間の相互作用の基本的な機能のために十分なテストを追加する必要があることを信じています。私は、新しいコードがワークフローを壊さないことを確認するための受け入れテスト(またはサービスレベルテスト)はほとんどないと信じています。

最後に、私たちの受け入れテストを追加したいと思います

  1. クライアントからMVCのクライアントからログイン
  2. ログインと同意ページが表示されるか、コンソールアプリケーション
  3. から設定
  4. コールAPIに基づいて表示されません
  5. MVCクライアントからAPIを呼び出します10
  6. アピコールが不十分なため、スコープの
  7. ユーザーの主張が正常に ...

を追加しました失敗し、我々が持っている統合テストの数は、私がここで言及何かがある場合は22

が私を修正すること自由に感じています正しいアプローチではありません。

あなたのIdentityServer4の実装に最適な

+0

このような徹底的な答えに感謝します!私は質問がかなり一般的で幅広いことを知っていますが、これらの一般的な提案は私が望むものです。ある時点であなたに個人的に連絡できることによって、私は多くの利益を得ると思う。しかし、あなたの答えについては、ソースプロジェクトに基づいたDiscoveryClientテストも開始しました。私はあなたが共有したリンクの答えにある同じ4行を持っていますが、WebHostBuilderにどのスタートアップファイルを提供したのでしょうか?私はあなたのポイントのほとんどに同意するが、私はまだセレンに触れないだろう。また、独自の管理UIを開発しましたか? –

+0

WebHostBuilderにオーバーライドされたテスト起動が渡されました。はい、私たちは小さなAdminUIを開発しました – MJK

+0

だから、彼らはソースプロジェクトでそれを持っているのと同じですか?IntegrationTestsプロジェクト内に新しい別のStartupクラスがありますか?しかし、私はIdS4の実際の実装との統合をどのようにテストするのか理解するのに苦労していますか?現在は、Testプロジェクト内のClientsとResourcesの新しいクラスを作成しました。私が正しいことをテストしていることが私にとって理にかなっている唯一の方法は、私の実際の実装とまったく同じクライアントおよびリソースオブジェクトを持つことです。さもなければ、それはテストのためだけに別の実装であり、実際の実装が動作することを保証するものではありません。 –

関連する問題