单元测试与调解模式 - 所有私营到上市
-
12-09-2019 - |
题
我使用的介体图案,以促进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的包访问方法。
我没有那么多喜欢做的一切公共的,不仅是因为准入问题的想法,但因为它杂波了界面 - 我宁愿类的公有接口明确的什么的这样做,不是的如何的它吧,这是经常在我结束了,如果我公开方法我宁愿是私有的。