【问题标题】:Would you consider this a proper test case?你认为这是一个合适的测试用例吗?
【发布时间】:2011-01-26 04:04:20
【问题描述】:

我想就我的第一个 PHPUnit 测试用例获得一些反馈。

测试的主题是 PHP 应用程序中的一个简单配置类。它用于创建、存储和检索配置设置。

设置存储在类内的数组中。每个设置都有以下属性:

  • 键(例如frontend:menu:bgcolor

  • 类型(stringinthexcolorboolean 之一)

  • 值(混合)

  • 只读(布尔)

必须首先创建每个设置。在创建时,每个设置都被分配了一个类型、只读标志(默认为 false)和一个默认值。

类方法:

public function create($key, $value, $type = "string", $read_only = false) 
public function set($key, $value)   
public function get($key)  

我正在运行的测试:

(ok) 和 (fail) 是测试的预期结果。

  • 创建一个名为test 的设置,类型为string,初始值为xyz (ok)

  • 加载设置test并期望返回值xyz(ok)

  • 将设置test设置为abc(ok)

  • 加载设置test并期望返回值abc(ok)

  • 加载设置töst(失败,密钥不存在)

  • 创建一个名为 test_read_only 的设置,类型为 string,初始值为 Mary had a little lamb,只读标志设置为 true (ok)

  • 将名为test_read_only的设置设置为Peter had a big lamb(失败,密钥为只读)

  • 加载名为test_read_only的设置并期望返回值Mary had a little lamb(ok)

  • 创建一个名为 test_integer 的设置,类型为 int,初始值为 5,只读标志设置为 true (ok)

  • 创建一个名为test_integer_second的设置,类型为int,初始值为5.23049505906(失败,初始值类型错误)

  • 创建一个名为 test_weird 的设置,类型为 sdasfäödsf#ädfsaö(失败,找不到类型)

  • 将名为test_weird的设置设置为Peter had a little lamb(失败,未定义键)

问题:

  • 这个测试用例对您有意义吗?
  • 您认为这是一个完整的测试用例吗?
  • 您会做哪些不同的事情,或者另外做些什么?

更新:到目前为止我将实施的建议:

  • 字符串长度检查
  • 涉及剩余数据类型booleanhexcolor 的测试
  • 现在不需要密钥命名测试,但将来会。

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    我会为缺失的类型(布尔值和十六进制颜色)添加测试,包含有效值和无效值)。

    我不知道您对键的命名约定是否有一些限制,例如您可以为键分配有效和无效的名称?

    对我来说,您绝对应该添加的另一个测试:如果您创建两次密钥会发生什么? 有不同的类型?

    顺便说一句,你做得很好,对我来说

    【讨论】:

    • 谢谢!目前还没有密钥命名约定,但很好。我肯定会为其余类型添加测试。重复键的行为在此类中定义得非常宽松(允许覆盖),但无论哪种方式都会得到测试。
    【解决方案2】:

    测试用例是有意义的,我不会认为它们是完整的,因为您没有任何十六进制颜色或布尔值的测试用例。此外,您可能希望对字符串值的长度进行某种限制。

    【讨论】:

    • 很好,由于字符串值有限,我们需要一些边界测试用例。
    • 非常好,干杯。我将完成数据类型检查。检查字符串长度并创建边缘情况是个好主意。
    • 假设键是字符串,还有键大小的长度限制。
    【解决方案3】:

    你的测试几乎涵盖了所有可以做的事情,我认为它相当不错。 单元测试不必详尽(很少可能)

    我只会添加这样的内容:

    • 将设置 test_integer 设置为“abc”(失败,错误类型)

    也许还有一些 hexcolor 和 boolean 类型验证的测试

    【讨论】:

      【解决方案4】:

      我会添加测试以更改现有密钥的类型。此外,对于现有的非只读键,更改为只读,并在更改类型和不更改类型的情况下进行。

      另外,你的 int 类型有范围吗? php 可能因平台而异。 float 可以看起来像 int。

      【讨论】:

        猜你喜欢
        • 2019-05-30
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多