簡體   English   中英

C++ 如何模擬 asio::awaitable 方法

[英]C++ How can I mock an asio::awaitable method

我想從 boost asio 庫中模擬以下行。

auto bytes = co_await socket.async_read(boost::asio::buffer(data), boost::asio::use_awaitable);

我想創建一個代表套接字的接口,然后通過使用 asio 實現該接口以進行生產,並通過實現我自己的模擬 class 來進行測試。

class MockSocket{
  asio::awaitable<size_t> async_read(boost::asio::buffer&& buffer){
    this.buffer = buffer;
    co_await this.something;
    co_return this.size;
  }

  void complete_read(string dataToPutInBuffer){
     this.buffer.write(dataToPutInBuffer);
     this.size = dataToPutInBuffer.length();
     this.something.resume();
  }
}

我不知道 this.something 應該是什么。 asio::awaitable 似乎沒有 resume() 方法。

您可以使用async_resultasync_initiate來實現您自己的啟動 function ,它采用 Asio CompletionToken

另請注意,Beast 包含一個模擬 AsyncStream 的AsyncStream - 這足以滿足例如asio::async_read*系列操作。

在這里看到它: 測試::stream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM