代码之家  ›  专栏  ›  技术社区  ›  aceofbassgreg

Minitest:集成测试、模板模式和NotImplementedError

  •  -1
  • aceofbassgreg  · 技术社区  · 9 年前

    假设我有以下课程:

    class AbstractClass
      # code omitted
    
      def get_from_api(data)
        APIRequestClass.send_request(config_info: config_info(data))
      end
    
      # force subclass to add method w/ proper config hash
      def config_info(data)
        raise NotImplementedError
      end
    end
    

    我想编写一个向API提交请求的集成测试。然而,我需要定义 config_info 这样做。以下是我在这方面的一个尝试:

    # abstract_class_test.rb
    # once this works I would remove class declaration to helper file
    require_relative '../test_setup'
    
    class SpecificClass < AbstractClass
      def config_info(data)
        {
          sample: "Foo",
          data:   data
        }
      end
    end
    
    
    class AbstractClassTests < MiniTest::Test
    
      def setup
        @instance = SpecificClass.new
      end
    
      def test_that_something_comes_back_from_api
        puts @instance.config_info("data")
        response = @instance.get_from_api("data")
    
        assert_equal jobs.class, Array
      end
    
    end
    

    这个 puts 语句导致 NotImplementedError .

    • 在这种情况下,是否有更好的方法来编写集成测试(即不定义 SpecificClass )?

    • 为什么不呢 特定类别 '实施 配置信息 在方法查找路径中?

    • 是否有更好的方法迫使最终用户提供API请求所需的配置信息?

    现在我只需测试 APIRequestClass.send_request 方法并传入适当的哈希。我仍然对上面提出的问题很感兴趣,但也许第四个问题是:从一开始测试这个功能是否有显著的优势 AbstractClass ,而不是简单地从 APIRequestClass ?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Karl Higley    9 年前

    从AbstractClass一路测试该功能,与从APIRequestClass简单测试它相比,是否有显著优势?

    看起来唯一要测试的是抽象类的未实现方法,所以也许不是?从某种角度来看,抽象类是特定类的实现细节,因此测试特定类可能更有意义。

    是否有更好的方法迫使最终用户提供API请求所需的配置信息?

    似乎配置和数据可以是两个独立的必需参数 send_request 它们在方法内部组合。这可能会让你完全摆脱抽象类。

    有没有更好的方法在这个实例中编写集成测试(即不定义SpecificClass)

    根据以上内容,您可以测试配置和数据是否正确地组合到 APIRequestClass 。在那一点上,可能还有什么需要测试的,也可能没有。