我正在為datastax cassandra擴展開發一個包裝器。擴展的簡單用法如下,它嘗試連接到Cassandra服務器上的服務器:127.0.0.1:9042$connection = \Cassandra::cluster()->build()->connect(); // instance of \Cassandra\DefaultSession顯然,它會出現錯誤,因為沒有正在運行的服務器可用。我試圖一步一步地嘲笑所有這些調用,但它不起作用。對于軟件包,主要問題是:mockery/mockery\Cassandra,并且都定義為最終類\Cassandra\Cluster\Builder\Cassandra\DefaultSession所有類都是預加載的,因此代理和部分模擬不起作用我不想在我的機器上運行cassandra服務器,因為它無法處理如此繁重的服務器,而且我想為我正在開發的軟件包設置一個CI任何想法如何處理這種情況?
2 回答

BIG陽
TA貢獻1859條經驗 獲得超6個贊
你可以做一些事情來避免嘲笑整個宇宙進行測試。
在這種特定情況下,創建一個可能已經足以讓你更容易地注入/模擬東西。CassandraSessionFactory
不過,我建議將存儲庫的職責分離到一個接口中,并制作一個特定于Cassandra的實現。
例如,假設您有一個集合/表。而且您希望您的程序能夠獲取它們。然后,您將創建一個包含方法的接口。稍后,您將能夠創建一個稱為具體實現,該實現使用適當的擴展來實現此目的。Person
PersonRepository
fetchBySomething(): Person
CassandraPersonRepository
有了這個,你可以通過僅模擬其接口來對需要的所有內容進行單元測試。并僅對連接進行合約測試。PersonRepository
CassandraPersonRepository
看看這篇文章: https://thephp.website/en/issue/clean-tests-with-php-and-phpunit/ 有兩個部分對你的情況有幫助:“測試應該沒有I / O操作”和“始終注入依賴關系”。他們展示了實現我剛才提到的快速方法。
額外提示:使用預言而不是phpunit的模擬。更容易,甚至更快。
我希望這個答案是有用的:)
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報
0/150
提交
取消