亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以在 PHP 中模擬 PECL 擴展?

是否可以在 PHP 中模擬 PECL 擴展?

PHP
慕斯709654 2022-08-05 16:03:41
我正在為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的實現。

例如,假設您有一個集合/表。而且您希望您的程序能夠獲取它們。然后,您將創建一個包含方法的接口。稍后,您將能夠創建一個稱為具體實現,該實現使用適當的擴展來實現此目的。PersonPersonRepositoryfetchBySomething(): PersonCassandraPersonRepository

有了這個,你可以通過僅模擬其接口來對需要的所有內容進行單元測試。并僅對連接進行合約測試。PersonRepositoryCassandraPersonRepository

看看這篇文章: https://thephp.website/en/issue/clean-tests-with-php-and-phpunit/ 有兩個部分對你的情況有幫助:“測試應該沒有I / O操作”和“始終注入依賴關系”。他們展示了實現我剛才提到的快速方法。

額外提示:使用預言而不是phpunit的模擬。更容易,甚至更快。

我希望這個答案是有用的:)


查看完整回答
反對 回復 2022-08-05
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

您應該圍繞cassandra API開發一個適配器,然后在測試中模擬/替換它。


查看完整回答
反對 回復 2022-08-05
  • 2 回答
  • 0 關注
  • 134 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號