C++에서 외부 종속성을 모의하는 방법에는 세 가지가 있습니다. 1. 스터빙(미리 정의된 동작), 2. 스터빙(호출 로깅), 3. 주입(모의 항목을 인수로 전달). 스터빙, 스터빙, 주입을 통해 구성요소를 분리하고 강력한 단위 테스트를 생성할 수 있습니다.
C++ 단위 테스트에서 외부 종속성을 모의하는 방법
단위 테스트에서 외부 종속성을 모의하는 것은 개별 구성 요소의 테스트를 격리하는 데 매우 중요합니다. 다음은 C++에서 외부 종속성을 쉽게 모의하는 세 가지 방법입니다.
1. 스텁
스텁은 실제 종속성을 호출하지 않고 미리 정의된 동작을 제공하는 모의입니다. 스텁을 생성하려면 Google Mock 또는 CMocka와 같은 모의 프레임워크를 사용할 수 있습니다.
// 使用 Google Mock 创建一个桩: class MockExternalDependency { public: MOCK_METHOD(int, Function1, (int a, int b)); }; // 创建桩并用它替换实际的依赖项: MockExternalDependency mockDependency; EXPECT_CALL(mockDependency, Function1(1, 2)).WillOnce(Return(3)); // 测试代码: int result = TestFunction(&mockDependency); ASSERT_EQ(result, 3);
2. 스텁
스텁은 스텁과 유사하지만 사전 정의된 동작이 없습니다. 대신 종속성 호출을 기록하고 이를 검사할 수 있습니다. 입력 및 호출 순서를 확인하는 데 유용합니다.
// 使用 CMocka 创建一个存根: void external_dependency_stub(int a, int b) { // 记录被调用的参数 } // 设置存根并测试代码: cmocka_set_stub(external_dependency, external_dependency_stub); TestFunction(); // 检查存根中记录的调用: ASSERT_TRUE(cmocka_call_count(external_dependency) > 0);
3. 주입
삽입에는 테스트 중인 함수에 종속성을 매개변수로 전달하는 작업이 포함됩니다. 이를 통해 테스트 중에 모의 객체를 사용하도록 종속성 구현을 쉽게 대체할 수 있습니다.
// 使用依赖项注入进行测试: void TestFunction(ExternalDependency& dependency) { // 使用模拟依赖项调用函数: MockExternalDependency mockDependency; EXPECT_CALL(mockDependency, Function1(1, 2)).WillOnce(Return(3)); int result = TestFunction(&mockDependency); ASSERT_EQ(result, 3); }
실제 사례:
함수가 있다고 가정해 보세요 ReadFile
,它依赖于外部类 FileSystem
中的 OpenFile
和 ReadFile
方法。为了对 ReadFile
进行单元测试,我们需要模拟 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"); }
위 내용은 C++ 단위 테스트에서 외부 종속성을 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!