質問

Iは、GUIオブジェクトのユニットテストを容易にするために、Mediatorパターンを使用しています。

psudoコード例:

Class MyGuiClass
{
  //...  Declare and initialize mediator to be a MyMediator
  private void On_SomeButtonPressed()
  {
     mediator.SomeButtonWasPressed();
  }
}

Class MyMeditator
{
  public void On_SomeButtonPressed()
  {
     //.. Do something now that the button was pressed
  }

}
SomeButtonは、ウィンドウを作成することなく、押したときに、私は今ユニットテスト何が起こる可能性があるため。

これはいいです

私の関心は、私はプライベートだったとメディエータを呼び出すことになるいずれかのためにそれを公開して方法をとっているということです。過去の回は私が公共のしなければならなかった多くのメソッドを持っていなかったので、それは私を気にしませんでした、これを行っています。

私は現在、このパターンを使用することは非常に大きなクラスをリファクタリングしていますし、何らかの方法私はどのクラスのメソッドのいくつかはのために公開されMyMediatorかを作ることができる人の可視性を制御することができますがある場合、私は疑問に思って。 (これが可能かさえも必要ではないかもしれないが、私は私が求めるだろうと思った。)

タグ(私は、.NET 3.5 SP1とC#3.0を使用しています)
役に立ちましたか?

解決

ポイントは、プライベートメソッドは、公開することで、クラスはより多くの混乱が少ない作っているので、あなたが「クリーン」、そのクラスの公開「API」を表示するには、クラスのパブリックインターフェイスが欲しいということですか。

あなたができることがいくつか: 1)クラス)実際にあなたのメディエーターの「公の顔」(または謙虚なオブジェクトが何であるかによって考え、喜んでこれらのメソッドを公開します。アセンブリの公開顔の一部ではない - - 彼らは唯一のアセンブリ内で使用されている場合でも、それは大丈夫ですので、あなたのメディエータークラス自体がpublicとして宣言されていないことに注意してください。そうであってもその公開方法はまだアセンブリの内部にあります。

2)あなたは、あなたのテストクラスが別のアセンブリであるならば、プライベート(とが)、アセンブリのInternalsVisibleTo属性を設定するための内部使用して陰部をごまかすことができます。

3)彼らはpublicメソッドから呼び出され、その使用を経由して検査を受けるため、原理的には、あなたが陰部をテストする必要はありませんすることにより、ユニットテストに「ブラックボックス」アプローチを取ります。

他のヒント

私は、GUI以外の、メディエーターのインスタンスを持っている人...それは問題ではないと思いますか?誰かがない場合、それは、メソッドを呼び出すために起こっていますか?もしそうであれば、それは問題ではありませんか?それは、気づく診断し、バグを修正するのは難しいでしょうか?

私はあなたがが、あなたがイベントで探しているものを達成することができると思います:

例えばます。

/* in the gui class (view) */
public event EventHandler OnButtonClicked;

/* in the mediator */
public MyMediator(MyView view) 
{
    view.OnButtonClicked += HandleButtonClicked;
}

private void HandleButtonClicked(object sender, EventArgs e)
{

}

C#のわからないが、Javaであなたは(アクセス指定子を省略することによってJavaで)パッケージレベルのアクセスとして何かを宣言することができます。私は何をすることは、テストクラスcom.a.b.c.MyClassに、私は、合法的にMyClassのパッケージ・アクセス・メソッドにアクセスすることができ、テストクラスcom.a.b.c.MyClassTestを、持っていますので、私のパッケージ構造に匹敵する別のテストの階層を作成することです。

私だけではないため、アクセスの問題のすべてが公共作りのアイデアのようにあまりないが、それはクラッタアップインターフェイスを理由 - 私はむしろクラスのパブリックインターフェイス特急のものをのそれは、の方法のそれは私がプライベートであることを好む方法を公開する場合、私は結局どこしばしばである、それをしないしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top