我使用的介体图案,以促进GUI对象的单元测试。

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或哪些类的一些方法是公众知名度。 (这可能是不可能的或甚至必要的,但我想我会问。)

(我使用C#3.0与.NET 3.5 SP1)

有帮助吗?

解决方案

的一点是,你想一个类的公共接口显示类的公共“API”,所以在制作私有方法公共您正在类更加混乱,少“干净”?

有几件事情可以做: 1)想通过什么是真正的中介(或不起眼的对象)类的“大众脸”,并愉快地使这些方法公开。未装配的公众形象的一部分 - - 即使他们只是在组件中使用了没关系,因为你的中介类本身没有声明公告。因此,即使它的公共方法仍内部的组件。

2)可以通过使用内部私人(和然后将组件的InternalsVisibleTo属性如果你的测试类是在一个单独的组件)捏造阴部。

3)乘坐“黑盒子”的单元测试方法,从而在原则上你永远需要测试的士兵,因为他们可以通过他们的使用从公众方法调用时进行测试。

其他提示

我觉得也没关系..谁的介体的情况下,比其他的贵?如果有人做,是要调用的方法?如果是这样,这很重要?这将是很难注意到,诊断和修复bug?

我觉得你可以实现你的事件,虽然找什么:

e.g。

/* 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,我将有一个测试类com.a.b.c.MyClassTest,这样就可以合法地访问MyClass的包访问方法。

我没有那么多喜欢做的一切公共的,不仅是因为准入问题的想法,但因为它杂波了界面 - 我宁愿类的公有接口明确的什么的这样做,不是的如何的它吧,这是经常在我结束了,如果我公开方法我宁愿是私有的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top