【问题标题】:What exactly are you supposed to test when doing TDD做 TDD 时你到底应该测试什么
【发布时间】:2014-05-20 03:02:49
【问题描述】:

大约 2 个月来,我已经阅读了几篇关于 TDD 的文章,但我对我在测试什么有一个模糊的概念。我首先想到的是测试输出:例如,使用PHP 作为网络脚本语言,我测试我的JSON 输出,以便服务器的响应是:

{
    "id":1,
    "name":"Chris",
    "token":"5ke3k62$5%34^%k3"
}

因此,如果响应与之前的 JSON 字符串匹配,则测试通过。我不是 100% 确定这就是 TDD 的全部意义,但这就是我所理解的。

那么让我们说一个移动应用程序。我想做一个hello world应用。一个Activity 和一个显示“Hello world”的TextView。什么是测试用例,我应该测试什么。请给我一些小例子,以便我了解它的全部内容。

【问题讨论】:

    标签: php android unit-testing junit tdd


    【解决方案1】:

    TDD 不是一种测试风格,而是一种开发风格。使用 TDD:

    1. 只测试您希望您的应用已经完成的一件事
    2. 运行测试以确保它失败(以防止以后出现误报)
    3. 在测试通过之前尽可能少地编写代码
    4. 冲洗并重复

    如果您不确定如何编写测试,对于第 1 步,请参阅您最喜欢的测试框架的文档。

    【讨论】:

    • 好的,假设我想要一个Activity 和一个填充的ListView。列表视图数据将从字符串数组资源加载。我的测试将包含什么等,请解释这个例子以理解
    • 我不确定您使用的是什么框架/DSL,但这里有一个抽象示例:
    • test: list_should_populate_from_sa_resource\n Make SA_Resource["A", "B", "C"] -> the_resource\nMake Activity[the_resource] -> A\n Expect A.list_view to match the_resource\n :end_test
    • 抱歉格式化。不知道我做错了什么:(
    【解决方案2】:

    测试您期望代码执行的操作。如果您希望代码输出该 json,则编写一个测试来检查它。描述您期望代码执行的操作,例如

    Should_return_json_response
    Should_return_name
    Should_provide_a_token
    

    您是在编写代码之前说出您希望代码执行的操作。只要您获得所需的结果,您如何在代码中实现这一点就取决于您了。

    【讨论】:

      【解决方案3】:

      TDD 指的是编写单元测试的实践。单元测试是专注于测试小代码单元的测试。通常,您希望测试调用类上的公共方法所做的状态更改。测试应涵盖该方法中的所有代码路径。如果您的单元测试依赖于跨越边界的依赖项,例如从 Web 客户端到服务器调用数据库、电子邮件、文件系统,测试不再是纯粹的单元测试。现在它变成了一个集成测试。

      我写了一篇博客文章,介绍了如何测试第一个 TDD 以构建被测代码。您可以阅读帖子here。我知道代码不是 PHP,但概念是相同的。 Here 是用 php 完成的 kata。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多