测试 - 如何对此常见方案进行分类和处理

时间:2017-11-28 22:19:56

标签: php unit-testing testing integration-testing

我正在深入研究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(从db获取内容的函数)表现正常,因为我只想测试getAndOrderUsersByAge()吗?当我正在阅读我测试的两本书时,我不确定这个“概念”是什么。这是我“嘲笑”的地方,例如为getAllUsers()创建一些假数据以返回?

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

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

1 个答案:

答案 0 :(得分:1)

  

1。)测试函数getAndOrderUsersByAge()单元测试,集成测试还是......?

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

  

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

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

  

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

测试应具有验证sortUsers功能的性质。我不确定你的数据看起来如何,但有些测试可能是:

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

2)具有无效数据的数据集,如名称中的特殊字符

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

4)具有空值的数据集

5)使用1个元素数组

的数据集

6)重复元素数组

的数据集

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