【问题标题】:Testing - How this common scenario is classified and handled测试 - 如何对这种常见场景进行分类和处理
【发布时间】:2017-11-28 22:19:55
【问题描述】:

我只是深入研究 php 中的测试/测试驱动开发,对于如何处理我们遗留代码库中的一个非常典型的场景有点困惑。我们的代码库没有很多类,它非常面向函数式编程。

在这个伪代码示例代码中,我想为 getAndOrderUsersByAge() 编写一个测试。如您所见,它首先从我们的数据库中获取所有用户(可以说是在一个巨大的数组中,因为我们没有对象/类)然后对它们进行排序。这在我们的代码中当然是很常见的,操作或分析从数据库中获取的数据;基本上不是对象,而是一组数据库行。

请注意,我在 if 语句中添加了一个错误,以模拟我希望我的测试捕获的错误。

//gets all users in our db into an array, then sorts them by age
function getAndOrderUsersByAge(){
     //get all users from the db
     $all_users = getAllUsers();

     //sort
     $all_users_sorted = sortUsers($all_users)

     //notice I've made a mistake here on purpose, left the "d" off of "$all_users_sorted"
     //so the function will always return false, a mistake...which I want tests to catch
     if(!empty($all_users_sorte){
         return $all_users_sorted;
     }
     else{
         return false;
     }
}

我的问题是:

1.) 是在测试函数 getAndOrderUsersByAge() 单元测试、集成测试还是……?

2.) 在我对 getAndOrderUsersByAge() 的(单元?)测试中,我想假设 getAllUsers(从数据库获取内容的函数)行为正确,因为我只想测试 getAndOrderUsersByAge() 对吗?当我阅读我的两本关于测试的书时,我不太确定这属于什么“概念”。这是我要“嘲笑”的地方吗?创建一些假数据让 getAllUsers() 返回?

3.) 你会为 getAndOrderUsersByAge() 编写什么测试?我想我会写一个确保当 getAllUsers() 返回一个非空数组时返回一个非空数组,因为这会捕获我创建的错误。我不确定还有什么。

非常欢迎任何提示、推荐阅读材料等。

【问题讨论】:

    标签: php unit-testing testing integration-testing


    【解决方案1】:

    1.) 是在测试函数 getAndOrderUsersByAge() 单元测试、集成测试还是……?

    您在代码级别进行的任何测试都是unit testing,基本上是测试方法、类、接口。验证单元或代码块的测试。

    2.) 在 getAndOrderUsersByAge() 的(单元?)测试中,我想假设 getAllUsers(从 db 获取内容的函数)

    您可以通过实际数据或模拟数据来测试getAndOrderUsersByAge()。模拟数据是首选,因此您可以更好地控制测试,并且可以为sortUsers 函数创建更多测试用例。

    3.) 你会为 getAndOrderUsersByAge() 编写什么测试?

    测试的性质应该能够验证您的sortUsers 函数。我不确定您的数据看起来如何,但一些测试可能是:

    1) 将有有效数据的数据集,将通过测试

    2) 名称中包含特殊字符等无效数据的数据集

    3) 在年龄字段或浮点数或超出范围的整数中包含垃圾的数据集,基本上测试您的函数在年龄具有不同类型的数据时的行为

    4) 具有空值的数据集

    5) 1 个元素数组的数据集

    6) 重复元素数组的数据集

    7) 数组中包含无效类型的数据集

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 2013-07-14
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2016-02-14
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多