2009-02-02 81 views
0

好吧,尝试我的第一次TDD尝试,现在是时候反映一下 并得到一些指导,因为它不是我成功。 该解决方案部分采用现有框架制作,可能使得TDD不太理想。似乎给我最大的问题是视图和控制器之间的交互。我会 举几个简单的例子,并希望有人会告诉我什么我 可以做得更好的错误。用户界面和TDD babysteps

每个视图的接口从基站接口继承,与这些 构件(有更多):

公共接口IVIEW
{
空隙ShowField(串fieldId)
空隙HideField(串fieldId)
空隙SetFieldVisibility(串fieldId,布尔可见)
空隙DisableField(串fieldId)
空隙ShowValidationError(串fieldId)
...
}

的具体视图界面,​​随后将添加成员每个 场这样 公共接口IMyView:IVIEW
{
字符串名称{;组; }
string NameFieldID {get; }
...
}

您怎么看待这个问题?从一个通用接口继承一个 好的或坏主意? 关于给我带来麻烦的事情之一是,我第一次使用了 ShowField和HideField,并发现我宁愿使用 SetFieldVisiblity。我没有改变方法的结果,但我不得不更新我的测试,这似乎应该是必要的。有多种方法做同样的事情,一件坏事?一方面这两种方法都适用于不同的情况,但它们确实使界面变得混乱,使得界面比其严格的界面更加复杂。

没有通用接口的设计会更好吗?这将删除 fieldID,我不是为什么,但我认为fieldID的东西闻起来,我 可能是错的。 我只会在需要时制作显示和隐藏方法,即如果 它们将被控制器调用。这将是一个不太通用的 解决方案,在视图中需要更多的代码,但控制器代码 会更简单一些。

所以一个视图界面可能是这样的: 公共接口IMyView
{
无效ShowName()
无效HideName()
字符串名称{;组; }
int Age {get;组; }
}

+0

您对“现有框架”有何意义?单元测试框架? – 2009-02-02 14:18:01

回答

0

你想测试什么? Show *将使用户界面中的小部件可见吗?做什么的?

我的建议:不要试图弄清楚框架是否正常工作。这是浪费时间。开发框架的人应该已经这样做了,所以你正在复制他们的工作。

通常,你想知道你的代码是否正确。所以如果你想知道你是否在调用正确的方法,请创建模型:

public class SomeFrameworkMockup extends SomeFramework { 
    public boolean wasCalled; 
    public void methodToTest() { 
     wasCalled = true; 
    } 
} 

使用模型构建UI。

要测试的第二件事是您的算法是否工作。要做到这一点,请将它们隔离在简单的帮助对象中,您可以轻松地使用所有方法并使用各种输入来测试它们。

在测试过程中避免外部框架。它只会让你感到困惑。当您构建了一个工作产品时,请使用鼠标进行测试。如果您发现任何问题,请到其根目录,然后才开始针对框架编写测试,以确保此错误不再出现。但90%的时间,这些错误也会出现在你的代码中。

0

此刻我并没有真正看到通用接口的附加价值。

我认为更好的解决方案是在控制器类上有一些属性:IsControlXYZVisible。然后,您可以将控件的可见属性数据绑定到此属性。

而你的单元测试将测试IsControlXYZVisible的值,这将更容易实现。

我也不明白你为什么说你对TDD有不好的经历。我认为你的应用架构需要更多的工作。

0

你的问题是有点晦涩但对我来说本身要求的链接标题:

The Humble Dialog box

而当你问,如果它(坏有两个功能做同样的事情,我说“是的,这很糟糕” 如果一个人打电话给另一个人,那么有两个功能有什么意义? 如果不是,你有一个代码重复,那就是当你更新一个而不是另一个时等待发芽的错误

事实上,有一个有效的案例,你有两个近似身份l函数:一个检查其参数,一个不是,但通常只有一个是公共的,而另一个是私人的...