【问题标题】:UI interface and TDD babystepsUI 界面和 TDD 步骤
【发布时间】:2010-10-04 22:26:01
【问题描述】:

好的,已经尝试了我的第一次 TDD 尝试,是时候反思一下了 并获得一些指导,因为这对我来说并不是那么成功。 该解决方案部分是使用现有框架进行的,也许 使 TDD 不太理想。似乎给我最大的部分 问题,是视图和控制器之间的交互。生病 举几个简单的例子,希望有人能告诉我我的 错了可以做得更好。

每个视图的接口都继承自一个基本接口,其中包含这些 成员(还有更多):

公共界面IView
{
无效 ShowField(字符串字段 ID)
无效 HideField(字符串字段 ID)
void SetFieldVisibility(string fieldId, bool visible)
无效 DisableField(字符串字段 ID)
void ShowValidationError(string fieldId)
...
}

具体视图的接口,然后为每个视图添加成员 像这样的领域 公共接口 IMyView : IView
{
字符串名称 { 获取;放; }
字符串 NameFieldID { 获取; }
...
}

你怎么看这个?是从一个通用接口继承的 好主意还是坏主意? 给我带来麻烦的事情之一是,我首先使用 ShowField 和 HideField 发现我宁愿使用 设置字段可见性。我没有改变方法的结果,但我 不得不更新我的测试,我认为这应该是必要的。是具有 多个方法做同样的事情,一件坏事?一方面两者 方法对于不同的情况都很方便,但它们确实使 接口,使接口比严格要求的更复杂。

没有通用界面的设计会更好吗?那将删除 fieldID,我不知道为什么,但我认为 fieldID 的东西很臭,我 可能是错的。 我只会在需要时制作 Show 和 Hide 方法,也就是说,如果 它们将被控制器调用。这将是一个不太通用的 解决方案并在视图中需要更多代码,但控制器代码 会更简单一些。

所以视图界面可能如下所示: 公共接口 IMyView
{
无效 ShowName()
无效隐藏名称()
字符串名称 { 获取;放; }
int 年龄 { 得到;放; }
}

【问题讨论】:

  • “现有框架”是什么意思。单元测试框架?

标签: model-view-controller interface tdd


【解决方案1】:

你想测试什么? Show* 是否会使 UI 中的小部件可见?干什么用的?

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

通常,您想知道您的代码是否正确。因此,如果您想知道是否调用了正确的方法,请创建模型:

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

使用模型构建 UI。

要测试的第二件事是您的算法是否有效。为此,请将它们隔离在简单的辅助对象中,您可以在其中轻松地使用所有方法并使用各种输入对其进行测试。

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

【讨论】:

    【解决方案2】:

    你的问题对我来说有点模糊,但标题本身需要一个链接:

    The Humble Dialog box

    当你问让两个函数做同样的事情是否不好时,我会说“是的,这很糟糕”。 如果一个调用另一个,那么有两个函数有什么意义? 如果没有,你有一个代码重复,当你更新一个而不是另一个时,这是一个等待发芽的错误。

    事实上,有一个有效的例子,你有两个几乎相同的函数:一个检查它的参数,一个不检查它的参数,但通常只有一个是公共的,另一个是私有的......

    【讨论】:

      【解决方案3】:

      目前我并没有真正看到通用接口的附加值。

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

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

      我也不明白你为什么说你在 TDD 方面的经历很糟糕。我认为您的应用程序架构需要做更多的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-29
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 2012-08-18
        • 1970-01-01
        • 2020-07-12
        • 2011-06-07
        相关资源
        最近更新 更多