当您拥有可以调用100次并且产生相同结果的方法时,测试很简单。但是你如何测试像Api这样的东西,你有这样的东西:
int CreateUser(username,password); //returns the id of the user, -1 if error
int SubmitOrder(username,password,productName,quantity);//returns the id of the order -1 if error
int CancelOrder(username,password,orderId); //returns -1 if error
您如何测试此Api的工作原理?你如何创建测试数据?我不能写它的单元测试,我不能使用相同的测试数据,因为我无法创建用户两次(UserName是唯一的)。当我提交订单时,我总是得到不同的orderIds作为回复。
答案 0 :(得分:1)
您需要找到一些方法将系统“重置”为众所周知的初始状态,即没有用户或订单的状态。
您还需要找到一些方法来观察系统中的状态。这种方式实际上可能是破坏性的,即它可以修改甚至损坏系统的状态,但是。在您的情况下,方法CreateUser
可以用作此类观察者来检查用户是否已经存在,因为已知在这种情况下返回-1
。
以下是您的一个测试用例的样子:
reset (); // Each test case should start with reset
assertNotEquals (-1, CreateUser ("foo", "bar")); // This should work fine
assertEquals (-1, CreateUser ("foo", "zoo")); // Make sure user "foo" does exist
assertNotEquals (-1, SubmitOrder ("foo", "bar", "apple", 1)); // Make sure user can pass authentication
assertEquals (-1, SubmitOrder ("foo", "zoo", "apple", 1)); // Make sure password is actually checked
上述测试用例检查CreateUser
是否实际创建了具有给定名称和密码的用户,并且不允许创建两个具有相同名称的用户。
这是另一个测试用例:
reset ();
CreateUser ("foo", "bar");
orderID = SubmitOrder ("foo", "bar", "apple", 1); // Submit order
assertNotEquals (-1, CancelOrder (orderID)); // Make sure order was really created
assertEquals (-1, CancelOrder (orderID)); // Make sure order was cancelled
等等。因此,最好找到更直接的方法来观察系统状态,例如:通过直接查询数据库。
答案 1 :(得分:-1)
我假设你在谈论一些OOP语言。我认为您可以通过单元测试和依赖注入来解决您的问题。 核心理念:
因此,在测试环境API写入其他一些假数据库或只是将查询打印到文件,您只需检查此文件的内容是否符合您的预期。
精彩视频:
http://www.youtube.com/watch?feature=player_embedded&v=wEhu57pih5w#!