我应该如何测试这个模块?
我一直在做Rails开发很短的时间,但已经相当快地完成了它。我仍然失去的一个领域是写作测试。我应该如何测试这个模块?
我明白如何编写测试,但我永远不知道应该测试什么,并且使我很难真正开始编写自己的测试。
我最近编写了一个gem,用于我正在开发的项目的API,并且认为这将是我编写一些测试的最佳时机。我仍然对我应该测试的东西感到迷茫。
我希望如果我发布我的一个类与一些方法,有人可能能够给我一些我应该测试的想法。
我正在使用的API返回JSON对象,所以我所有的方法实际上只是助手,它使GET请求返回到我正在构建的应用程序。我使用HTTParty gem来获取请求。
第一种方法只是列出了有关特定广告客户的一些信息:
module MyModule
class User < MyObject
# User
# This will list information about a specific user
# required parameter(s):
# user_id
# example:
# MyModule.connect("Your API Key")
# MyModule::User.list(5)
# returns:
# Returns a single result with the following properties:
# {
# "user_name":"blah",
# "user_id":253,
# "last_login":"2011-03-01"
# }
def list(user)
MyModule.get("https://stackoverflow.com/users/#{user}")
end
end
end
我最初的猜测是我会测试,以确保此JSON对象回来与正确的属性,但我不能完全肯定。
我还需要测试以确保传入方法的参数在那里,或者是我不应该担心的事情?
关于测试的事情完全取决于你想要成为多么彻底。在理想的世界中,您可以对应用程序的每个方面进行测试。鉴于您可能正在从事一个侧面项目,并且您在编程应用程序时花费的时间会更多,所以我认为基本的流量测试可以满足您的需求。
是的,检查正确的JSON属性将是一个好的开始。
你没有提到你正在使用的测试套件 - 如果你没有记住任何东西,我会推荐rspec。
希望帮助,
里根
我实际上使用minitest来做这件事。我写了一个非常小的测试,以确保我有一个版本号,这样我就可以习惯最小的工作,但不能真正决定要测试什么。因为这是我计划发布的宝石,所以我想尽可能多地进行测试。 – user1512631 2012-07-09 18:38:22
单元测试应该检查某个对象或方法的行为,不反对组成。即使如此,这里只有几件事情可以在这里测试:
- GET请求成功(或不)。
- 你得到有效的JSON(或不)。
- 你的记录没有被破坏。
您可能应该稍微测试一下。例如,我会测试这个用户故事:
Given a record with some reasonable fixture data,
When the record is successfully retrieved
Then your application does something useful with it.
我觉得帮助时,我不认为它是一个测试,而是把它当作我的类的行为的例子。 @ CodeGnome的答案很有用。通过阅读代码和描述,你会发现一个显而易见的行为方面:你的班级找到关于广告用户的登录信息。 (请原谅我对Ruby和Rails特有的语法缺乏了解,要像@CodeGnome一样做,但要有更具体的例子)。
您的课程“应该检索广告用户的最后登录日期”。这看起来像一个符合其行为的描述,并且您可以在此之后命名您的测试方法。
现在想想一些特定的例子。它是否会根据用户检索不同的数据?如果用户以前没有登录过,该怎么办?如果用户标识错误怎么办? MyModule总是可用,或者如果您失去移动连接,它可能不可用?那么你会怎么做?你的班级是否“应该增加连接错误”?
通过这样思考,你会发现行为的不同方面和不同的例子。像RSpec这样的东西可以帮助你轻松地描述这些,或者你可以用just_use_underscored_test_names
。
如果你没有有行为的不同方面,你可能有过早的重构/优化和太多的抽象层。
请记住,您正在查看有关该类如何行为以及为什么它很有价值的示例,以便您可以对其进行记录并使其易于理解。您正在使用它来帮助完善班级的职责,使其保持可维护性。这实际上并不涉及测试。
查看源代码并测试[httparty](https://github.com/jnunemaker/httparty/tree/master/spec)等其他宝石(因为您正在使用它)。此外,rdoc/yardoc对于最终开发人员非常有用,所以我建议为这些工具使用正确的文档和语法。 – jmdeldin 2012-07-10 00:18:41