我有一個包裝Asio的類。它旨在模擬通過域和TCP套接字進行通信,但是我對自動執行單元測試不知所措。我查看了FakeIt,但它僅測試虛擬方法,GoogleMocks suggests模板化了我的代碼,因此我可以通過單元測試的MockAsio實現和生產中的真實Asio。如何單元測試一段依賴於Asio的代碼?
是否有任何其他方式單元測試網絡代碼?假的域和TCP套接字,而不是運行整個堆棧?如果我使用GoogleMock,爲什麼要使用一個使用GoogleMock的類而不是我自己的實現來執行我需要的任何操作?
好吧,如果你依賴ASIO,那麼你不再測試這個小「單元」。單元測試框架變得越來越難作爲測試非單元測試的工具 – Hayt
我想嘲笑asio的輸出,所以我可以專注於單元。 – ruipacheco
我經常嘲笑I/O對象或它們的I/O服務,以便對應用程序協議進行單元測試(請參見官方的[定製服務示例](http://www.boost.org/doc/libs/1_59_0/doc/html/ boost_asio /示例/ cpp03_examples.html#boost_asio.examples.cpp03_examples.services))。在測試定時器時,還可以定製TimeTrait(請參閱[這裏](http://blog.think-async.com/2007/08/time-travel.html))。對於測試I/O,我經常發現更多值寫入離散的[mcve]集合,允許系統調用發生,這可以通過嘲弄I/O對象來掩蓋操作系統行爲 –