2010-10-28 12 views
2

我使用PHP 5.3和SimpleTest,但更普遍的答案是值得歡迎的。每個插件將是一個擴展抽象類的類...我如何測試這個接口的工作正常?我是否必須創建幾個插件並對其進行測試?還是有更令人滿意的方式?如何測試使用抽象類的插件接口?

作爲一個例子,想象寫一些東西代表金錢。用戶可以使用不同的貨幣類別進行擴展。

抽象類理財
{
私有靜態$符號;
private static $ num_decimals;

公共職能__construct($量){...}
公共職能__toString(){...}
}

然後一個插件是這樣的:

GBPound類延伸Money
{
private static $ symbol =「£」;
private static $ num_decimals = 2;
}

也許我可以模仿多重繼承,擴展單元測試類和貨幣類,但這種情況可能會導致混亂!

這很困難,因爲單元測試是關於測試接口的,但類本身是插件接口。

+0

問題是什麼?爲什麼你不能只測試'GBPound'類? – NOtherDev 2010-10-28 09:17:42

+0

因爲我想測試製作「GBPound」類或其他任何類的組合的能力。如果班級在安哥拉有用戶,我希望他們能夠使用該界面創建一個ANKwanza班。 – 2010-10-28 09:28:30

+0

爲什麼你需要英鎊?英鎊兌不是特別的,它不可能僅用貨幣來代表。只需使構造函數所需的$ symbol和$ num_decimals參數成爲非靜態的即可。您也可能想將貨幣重命名爲貨幣。 – Gordon 2010-10-28 09:33:48

回答

0

我決定通過創建一個空插件類來測試接口。對我來說,這似乎比嘲笑抽象類更清潔。 (但是由於其他原因,我正在將所有測試遷移到PHPUnit。)

1

不確定關於simpletest,但PHPUnit可以創建抽象類的模型,它允許您直接測試它們。

+0

感謝您的回答。我仍然不完全確定測試會是什麼樣子。靜態變量爲每個插件靜態設置,並且不能更改。我想測試:static :: $ symbol =「£」和static :: $ num_decimals = 2,self :: toString()==「£3.24」。我能想到的唯一方法就是創建一個純粹用於測試目的的插件。 – 2010-10-28 10:00:11

+0

測試'static :: $ symbol =「£」'是沒有意義的,因爲如果PHP本身能夠正常工作,那麼測試就不是你的工作。你需要假設它是有效的,並且你的班級的用戶會正確地擴展它。您的測試應該專注於測試__toString()方法,可以通過創建一個「假」插件或使用PHPUnit生成模型的能力來完成。 – Mchl 2010-10-28 11:11:02

+0

是的,這就是我的意思。因此,=而不是==。應該已經添加$ obj-> amount = 3.24(或任何接口將是)。我將看看PHPUnit。我原先決定不這麼做(這是我在PHP中的第一個TDD項目),因爲我想快速啓動,PHPUnit看起來像是比SimpleTest有更陡峭的學習曲線。 – 2010-10-28 12:13:30