Rspec Outside-In测试.run方法

时间:2015-11-06 05:38:44

标签: ruby testing rspec tdd

我遇到了将测试建模为从var bodyObj = $("body"); bodyObj.css('height', window.innerHeight + "px"); 方法驱动到应用程序内部工作的问题。

.run方法是尚未编写的应用程序的唯一入口点。你在下面看到它只是一个快速的模型,它可以的工作方式。

.run基本上是一个创建.run实例的工厂,添加了一些轮子和门和最后返回汽车的字符串表示。

因此,我不确定如何编写我的第一个测试来开始。

Car

我有些想法:

  • 我可以编写一个集成测试,但这并不会真正推动开发,因为集成测试只会检查调用带有json内容的两个变量(轮子和门)的class Car attr_accessor :wheels, :doors def initialize @wheels = [] @doors = [] end def self.run(wheels, doors) car = Car.new car.wheels = Car::Wheel.load_json(wheels) car.doors = Car::Door.load_json(doors) car.build.to_s end end Car.run(wheels_json, doors_json) 将会吐出一个字符串汽车的代表。我将不得不编写大量代码以使测试通过。
  • 如果.run正在返回.run的实例,我可以通过抓取返回的实例进行测试但是我不能这样做,因为该方法会返回一个字符串。

要清楚,问题是:鉴于上述代码,您将如何开始测试以帮助您减少并构建应用程序的其余部分。

1 个答案:

答案 0 :(得分:0)

单元测试的基本原则是每个单元(Car::WheelCar::Door)应单独测试。当你组成两个类时,你可以肯定,底层元素是正确实现的。

您应该拥有单一责任的方法(只是构建而不是构建和序列化),而不是run方法:

  def self.build(wheels, doors)
    car = Car.new
    car.wheels = Car::Wheel.load_json(wheels)
    car.doors = Car::Door.load_json(doors)
    car
  end

  def self.run(wheels, doors)
    self.build.to_s
  end

这样,您可以在返回对象时轻松测试build方法的输出。