2010-06-18 38 views
1

我如何重构以消除该规范的代码重复:BDD/TDD与JSpec - 删除重复代码

describe 'TestPlugins' 
    describe '.MovieScanner(document)' 
     before_each 
      MoviePage_loggedIn = fixture("movie_logged_in.html")    // Get logged-in movie page 
      MoviePage_notloggedIn = fixture("movie_not_logged_in.html")  // Get non logged-in movie page 
      scanner = new MovieScanner()            // Get movie scanner 
     end 

     it 'should scan logged-in movie page for movie data' 
      doc = MoviePage_loggedIn   // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 

     it 'should scan non logged-in movie page for movie data' 
      doc = MoviePage_notloggedIn  // Get document to scan 

      // Unit Tests 
      // ------------------------------------------------------------ 

      // Test movie scanner's functions 
      scanner.getMovieTitle(doc).should.eql "The Jacket" 
      scanner.getMovieYear(doc).should.eql "2005" 

      // Test movie scanner's main scan function 
      scannedData = scanner.scan(doc) 
      scannedData.title.should.eql "The Jacket" 
      scannedData.year.should.eql "2005" 
     end 
    end 
end 

回答

0

在BDD,我们想描述我们的应用程序或类的行为,使他们很容易改变。如果消除重复也会掩盖行为,请不要删除重复。代码被读取的次数比写入的要多10倍,IME甚至更多地用于BDD场景和单元级示例。

如果你决定无论如何去除重复,与可读性的东西取代它。我不熟悉JSpec但是我希望像

scannedData.shouldMatch "The Jacket", "2005" 

,所有的冠军和年度的相关结果进行检查。

要删除重复无关你是否登录与否:

独立的代码转换成吉文斯(背景下的地方不要紧,你如何到达那里),Whens(通过应用程序事件,其行为实际上你想要测试)和Thens(你正在寻找的结果)。你要找来描述系统和事物,用户可以用它做什么,而不是它是否是一个网页或窗口的功能 - 它不应该的问题。将较低级别的调用放在较低级别。

然后,您可以有两个不同的吉文斯 - 登录或未登录 - 和重用,其余的其他步骤。

+0

谢谢您的回答!我的意思,我怎么结合的登录和非登录的页面均测试,使得相同的测试代码不跨越测试复制? – Chetan 2010-06-24 19:33:35

+0

已编辑。希望能帮助到你! – Lunivore 2010-06-28 11:20:35