日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:52003
  • 待審:43
  • 小程序:12
  • 文章:1047590
  • 會(huì)員:762

在 c++++ 中模擬外部依賴項(xiàng)有三種方法:1. 樁(預(yù)定義行為),2. 存根(記錄調(diào)用),3. 注入(作為參數(shù)傳遞模擬)。通過樁、存根和注入,可以隔離組件并創(chuàng)建健壯的單元測(cè)試。

C++ 單元測(cè)試中如何模擬外部依賴項(xiàng)

在單元測(cè)試中,模擬外部依賴項(xiàng)對(duì)于隔離各個(gè)組件的測(cè)試非常重要。以下三種方法可以在 C++ 中輕松模擬外部依賴項(xiàng):

1. 樁(Stub)

樁是一種模擬,它提供預(yù)先定義的行為,而不會(huì)調(diào)用實(shí)際的依賴項(xiàng)。要?jiǎng)?chuàng)建樁,可以使用嘲諷框架,例如 Google Mock 或 CMocka。

// 使用 Google Mock 創(chuàng)建一個(gè)樁:
class MockExternalDependency {
 public:
  MOCK_METHOD(int, Function1, (int a, int b));
};

// 創(chuàng)建樁并用它替換實(shí)際的依賴項(xiàng):
MockExternalDependency mockDependency;
EXPECT_CALL(mockDependency, Function1(1, 2)).WillOnce(Return(3));

// 測(cè)試代碼:
int result = TestFunction(&mockDependency);
ASSERT_EQ(result, 3);

登錄后復(fù)制

2. 存根(Stub)

存根與樁類似,但它不會(huì)預(yù)先定義行為。相反,它會(huì)記錄依賴項(xiàng)的調(diào)用并允許您檢查它們。這對(duì)于檢查輸入和調(diào)用順序非常有用。

// 使用 CMocka 創(chuàng)建一個(gè)存根:
void external_dependency_stub(int a, int b) {
  // 記錄被調(diào)用的參數(shù)
}

// 設(shè)置存根并測(cè)試代碼:
cmocka_set_stub(external_dependency, external_dependency_stub);
TestFunction();

// 檢查存根中記錄的調(diào)用:
ASSERT_TRUE(cmocka_call_count(external_dependency) > 0);

登錄后復(fù)制

3. 注入

注入涉及將依賴項(xiàng)作為參數(shù)傳遞給被測(cè)試函數(shù)。這允許您輕松地替換依賴項(xiàng)的實(shí)現(xiàn),以便在測(cè)試期間使用模擬。

// 使用依賴項(xiàng)注入進(jìn)行測(cè)試:
void TestFunction(ExternalDependency& dependency) {
  // 使用模擬依賴項(xiàng)調(diào)用函數(shù):
  MockExternalDependency mockDependency;
  EXPECT_CALL(mockDependency, Function1(1, 2)).WillOnce(Return(3));
  int result = TestFunction(&mockDependency);
  ASSERT_EQ(result, 3);
}

登錄后復(fù)制

實(shí)戰(zhàn)案例:

假設(shè)我們有一個(gè)函數(shù) ReadFile,它依賴于外部類 FileSystem 中的 OpenFileReadFile 方法。為了對(duì) ReadFile 進(jìn)行單元測(cè)試,我們需要模擬 FileSystem

class MockFileSystem {
 public:
  MOCK_METHOD(FILE*, OpenFile, (const char* filepath));
  MOCK_METHOD(int, ReadFile, (FILE* file, char* buffer, int size));
};

void TestReadFile() {
  MockFileSystem mockFileSystem;
  FILE* mockFile = fopen("mockfile.txt", "w");
  EXPECT_CALL(mockFileSystem, OpenFile("mockfile.txt")).WillOnce(Return(mockFile));
  EXPECT_CALL(mockFileSystem, ReadFile(mockFile, testing::_, _))
      .WillOnce(SetArrayArgument<1>("Hello", 5));

  char buffer[10];
  int result = ReadFile("mockfile.txt", buffer, 10, &mockFileSystem);
  ASSERT_EQ(result, 5);
  ASSERT_STREQ(buffer, "Hello");
}

登錄后復(fù)制

分享到:
標(biāo)簽:C++ 單元測(cè)試 模擬依賴
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 52003

    網(wǎng)站

  • 12

    小程序

  • 1047590

    文章

  • 762

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定