我正在深入研究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()返回非空数组时返回非空数组,因为这会捕获我创建的错误。我不知道还有什么。
非常欢迎任何提示,推荐的阅读材料等。
答案 0 :(得分:1)
1。)测试函数getAndOrderUsersByAge()单元测试,集成测试还是......?
您在代码级别执行的任何测试都是unit testing,基本上是测试方法,类,接口。验证单元或代码块的测试。
2.。)在getAndOrderUsersByAge()的我的(单元?)测试中,我想假设getAllUsers(从db获取东西的函数)
您可以按实际数据或模拟数据测试getAndOrderUsersByAge()
。模拟数据是首选,因此您可以更好地控制测试,并可以为sortUsers
函数创建更多测试用例。
3.。)你会为getAndOrderUsersByAge()写什么测试?
测试应具有验证sortUsers
功能的性质。我不确定你的数据看起来如何,但有些测试可能是:
1)具有有效数据的数据集,将通过测试
2)具有无效数据的数据集,如名称中的特殊字符
3)在年龄字段或浮动数字或超出范围的整数中具有垃圾的数据集,基本上测试当年龄具有不同类型的数据时您的函数的行为
4)具有空值的数据集
5)使用1个元素数组
的数据集6)重复元素数组
的数据集7)数组中包含无效类型的数据