2

以下のようなパブリック インターフェイスを公開する自動生成コード (Ranorex GUI テスト ツールから取得) がたくさんあります。

public partial class MessageBoxPopupAppFolder : RepoGenBaseFolder
{
  // Ranorex.Button exposes public methods like Click()
  public virtual Ranorex.Button ButtonYes
  {
    get
    {
      return _buttonyesInfo.CreateAdapter<Ranorex.Button>(true);
    }
  }
}

私の問題は、以下のコードのような中間層を作成している最中であり、そのコードのユーザーが自動生成されたコードを直接呼び出すことによってそれをバイパスしないことを期待していることです (それはおそらく複雑なビジネスルールを破るでしょう) )

public class MyAdapter
{
  private MessageBoxPopupAppFolder _myMessageBox;

  public static void Acknowledge()
  {
    // some complex business rules
    _myMessageBox.ButtonYes.Click();
  }
}

私はいくつかの解決策を考えましたが、本当に満足できるものはありません:

  • 自動生成されたコードを手動で (またはスクリプトを使用して) 変更して、Ranorex メソッドの可視性を変更します。これは、名前空間のリファクタリングが少し必要になることを意味し、コードの再生成による維持が困難になります。
  • このコードを完全に別のバイナリにリンクし、完全にプライベートな API を介して通信します。たくさんの仕事が待ち受けています
  • その API の「禁止された」使用を検出して (単体テストの失敗として) 報告する、ある種のコード自己評価を実装します。

どうすればよいですか?

明確にするために、ミドルウェアを秘密にしておくことは心配していません。実際のクリックの正しいシーケンスを制御する必要があるだけです。

編集: チーム メンバー (ミドルウェアのユーザー) に公開したいのは、ビジネス指向の API (のようなAcknowledge()) です。これで問題ありません。良くないのは、Ranorex raw API ( Button.Click()) が来るのを防ぐことができないということです。

4

3 に答える 3

1
  1. 安全を確保したい場合は、スクリプトを使用して自動生成されたコードを変更する最初の方法が最適です。統合されたビルド プロセスにスクリプトを追加して、コードが再生成された場合に備えて、この get が常に実行されるようにします。

  2. それ以外の場合は、使用したくないメソッド呼び出しを検出するように FxCop ルールを設定できます。

  3. チームが小規模で、設計ガイドラインに従うことに慣れている場合。次に、これは API を使用しないようにチームをトレーニングする問題です。コード レビュー プロセスで、チームはこの問題を探す必要があります。欠点は、これは予防措置に過ぎず、チーム メンバーが間違いを犯す可能性があることです。この場合、QA とコード レビューはあなたの親友になります。

于 2013-01-15T00:56:29.993 に答える
0

エレガントで完全にクリーンなソリューションでこれを解決するには、設計に「深すぎる」​​ように思えます。すべての代替手段には独自の欠点があります。私が提案できるのは、独自のクラスで公開する Ranorex 型のアダプター/ファサード クラスを用意することです。これらのアダプターは、いくつかのロジックを処理し、呼び出しを実際の基になる Ranorex オブジェクトにルーティングします。あなたのAcknowledge例の場合、それはアダプターのメソッドになり、公開するパブリックタイプはアダプターのみになります。

理想的には、Button クラスで Click イベントを使用して、それをリッスンしてそれに応じて反応できるようにしたいと考えています。

于 2013-01-14T23:28:42.593 に答える
0

Ranorex は、生成されたメンバーの可視性の変更をサポートしていませんか?

ナンバーワンは間違いなくあなたが探しているもののように見えるので、間違いなく進むべき道のように聞こえます.

于 2013-01-14T23:22:11.630 に答える