2014-11-25 67 views
2

嵌套上下文组织的Python单元测试测试当写RSpec的测试,我发现它使用了非常明确的和有用的嵌套上下文结构:基于类似的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

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

  1. 舞动 - http://pythonhosted.org/behave/
  2. 生菜 - http://lettuce.it/intro/overview.html

黄瓜后主要参照,在Ruby中的BDD框架,这是在RSpec的第一个故事为基础的框架。

不知道这是否完全回答你的问题,但我希望你会觉得它有用。

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

另外,我认为你会发现有用的另一个方面是tdd使用外部和内部输出appoarch的概念。 Rspec/BDD,我认为是遵循外部模型。你可以看看这个讨论,我发现真的很有用https://softwareengineering.stackexchange.com/questions/166409/tdd-outside-in-vs-inside-out

+0

这是非常有用的,谢谢你的参考!我之前尝试过Cucumber进行网站集成测试,并且运行良好。我不确定将它用于其他类型的情况较少的东西,例如数据库ORM模型和实用程序类。对于这些情况似乎有点矫枉过正,也许不是在单个项目中使用BDD框架和Unittest的最佳解决方案。有什么建议?谢谢! – 322896 2014-11-25 17:46:05

+0

自动化测试发生在许多级别,单元测试覆盖并不意味着您不需要集成测试和功能测试的工具(就像您使用Selenium一样)。只要测试的结构和何时使用BDD工具的界限清晰,两者都不应该成为问题。 – Screamer 2017-02-08 09:32:54