我应该如何测试这个模块?

问题描述:

我一直在做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对象回来与正确的属性,但我不能完全肯定。

我还需要测试以确保传入方法的参数在那里,或者是我不应该担心的事情?

+0

查看源代码并测试[httparty](https://github.com/jnunemaker/httparty/tree/master/spec)等其他宝石(因为您正在使用它)。此外,rdoc/yardoc对于最终开发人员非常有用,所以我建议为这些工具使用正确的文档和语法。 – jmdeldin 2012-07-10 00:18:41

关于测试的事情完全取决于你想要成为多么彻底。在理想的世界中,您可以对应用程序的每个方面进行测试。鉴于您可能正在从事一个侧面项目,并且您在编程应用程序时花费的时间会更多,所以我认为基本的流量测试可以满足您的需求。

是的,检查正确的JSON属性将是一个好的开始。

你没有提到你正在使用的测试套件 - 如果你没有记住任何东西,我会推荐rspec。

希望帮助,

里根

+0

我实际上使用minitest来做这件事。我写了一个非常小的测试,以确保我有一个版本号,这样我就可以习惯最小的工作,但不能真正决定要测试什么。因为这是我计划发布的宝石,所以我想尽可能多地进行测试。 – user1512631 2012-07-09 18:38:22

单元测试应该检查某个对象或方法的行为,不反对组成。即使如此,这里只有几件事情可以在这里测试:

  1. GET请求成功(或不)​​。
  2. 你得到有效的JSON(或不)。
  3. 你的记录没有被破坏。

您可能应该稍微测试一下。例如,我会测试这个用户故事:

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

如果你没有行为的不同方面,你可能有过早的重构/优化和太多的抽象层。

请记住,您正在查看有关该类如何行为以及为什么它很有价值的示例,以便您可以对其进行记录并使其易于理解。您正在使用它来帮助完善班级的职责,使其保持可维护性。这实际上并不涉及测试。