【发布时间】: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