基于类似于RSpec的嵌套上下文组织Python单元测试

时间:2014-11-25 06:06:06

标签: python unit-testing rspec contextmanager

在编写RSpec测试时,我发现它使用的嵌套上下文结构非常清晰且有用:

describe "a laptop" do
  before(:each) do
  end
  context "progamming" do
    before(:each) do
    end
    it "compiles programs" do
    end
    context "with an external monitor" do
      it "shows editors in multiple displays" do
      end
    end
  end
  context "video gaming" do
    before(:each) do
    end
    context "with normal graphic card" do
      before(:each) do
      end
      it "can not play League of Legends" do
      end
    end
    context "with expensive graphic card" do
      before(:each) do
      end
      it "can play League of Legends" do
      end
    end
  end
end

在嵌套时很容易共享/干掉那些设置和拆除代码,并且通过上下文结构,它也有助于"思考"关于规格的覆盖范围。我想知道我们通常如何编写Python单元测试来实现这一目标。或者哲学是不同的?

看起来我们可以通过inheriting the test class实现类似的设置/拆卸代码共享,但是仍然存在一些小问题,并且将它们分成不同的类似乎不是一个非常易读/可维护的结构,如果它说,更深2层。

1 个答案:

答案 0 :(得分:1)

请看一下python中的一些BDD框架。

  1. 表现 - http://pythonhosted.org/behave/
  2. 生菜 - http://lettuce.it/intro/overview.html
  3. 很大程度上模仿了黄瓜,Ruby中的bdd框架,这是RSpec中第一个基于故事的框架。

    不确定这是否完全回答了您的问题,但我希望您会发现它很有用。

    查看Dan North的博客。关于发展的哲学和原则的真正好的东西。http://dannorth.net/

    另外,我认为另一个有用的方面是使用out-in和out-out appoarch的tdd概念。 Rspec / BDD,我认为遵循从外到内的模型。你可以好好看看这个我觉得非常有用的讨论https://softwareengineering.stackexchange.com/questions/166409/tdd-outside-in-vs-inside-out