談php設計模式介紹——偽對象模式(2)_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:解析php字符串處理函數
      addcslashes 為字符串里面的部分字符添加反斜線轉義字符 addslashes 用指定的方式對字符串里面的字符進行轉義 bin2hex 將二進制數據轉換成十六進制表示 chr 返回一個字符的ASCII碼 chunk_split 按一定的字符長度將字符串分割成小塊 convert_cyr_string 將斯

      在上面的例子中,這種手段創建了一個名為MockAccumulator的類來響應所有Accumulator類的方法。另外,偽累加的動作還有其他手段來操作偽對象自身的實例。例如 setReturnValue()。給出一個方法名和一個值,

      setReturnValue()就可以改變偽對象而給出對應方法所調用的值。因此,這條語句$amount->setReturnValue(‘total’, 200)返回200而不論何時調用了total()方法。

      一旦進行完初始化工作后,你可以傳遞MockAccumulator類到calc_tax()函數來演示一個在真實的Accumulator對象空間中的動作。

      如果你止步于此——即用一個對象來返回所調用函數的“封裝”響應——你只是使用了ServerStub模式。 用偽對象來驗證方法的調用不限于此,因為它可以不限次序與次數。

      下面是一個通過對象來驗證“數據流”的例子:

      class MockObjectTestCase extends UnitTestCase {

      // ...

      function testCalcTax() {

      $amount =& new MockAccumulator($this);

      $amount->setReturnValue(‘total’,200);

      $amount->expectOnce(‘total’);

      $this->assertEqual(

      14, calc_tax($amount));

      $amount->tally();

      }

      }

      這里expectOnce()方法使用了一個字符串,它包含你想調用的方法名 。而tally()實際上用來檢查你的想法是否實現。這里,如果MockAccumulator::total()只調用一次或不調用,測試將失敗。

      在很多情況下你可以使用偽對象的”跟蹤”特性。例如,如果你傳遞一個具有三個值的數組到calc_total(),Accumulator::add()是否也如你所想的調用了三次呢?

      class MockObjectTestCase extends UnitTestCase {

      // ...

      function testCalcTotalAgain() {

      $sum =& new MockAccumulator($this);

      $sum->expectOnce(‘add’);

      calc_total(array(1,2,3), $sum);

      $sum->tally();

      }

      }

      那,這里發生了什么?傳遞調用的測試失敗。SimpleTest的錯誤消息如下所示:

      MockObject PHP4 Unit Test

      1) Expected call count for [add] was [1] got [3] at line [51]

      in testcalctotalagain in mockobjecttestcase

      FAILURES!!!

      Test cases run: 1/1, Passes: 2, Failures: 1, Exceptions: 0

      錯誤消息指出了盡管add() 方法被調用三次,但expectOnce()卻一次也沒用到。取代expectOnce()的可行方法是使用expectCallCount()。

      class MockObjectTestCase extends UnitTestCase {

      // ...

      function testCalcTotalAgain() {

      $sum =& new MockAccumulator($this);

      $sum->expectCallCount(‘add’, 3);

      calc_total(array(1,2,3), $sum);

      $sum->tally();

      }

      }

      偽對象扮演了一個演員的角色——這個角色由SeverStub提供合理的測試數據來響應方法的調用——并且作為一個評判的角色,驗證所調用的方法是否符合預想。

      分享:怎樣把握技巧開發PHP網站
      1.使用 ip2long() 和 long2ip() 函數來把 IP 地址轉化成整型存儲到數據庫里。這種方法把存儲空間降到了接近四分之一(char(15) 的 15 個字節對整形的 4 個字節),計算一個特定的地址是不是在一個區段內頁更簡單了,而且加快了搜索和排序的速度(雖然有時僅

      來源:模板無憂//所屬分類:PHP教程/更新時間:2009-06-20
      相關PHP教程