Compare commits
1 Commits
main
...
test_20260
| Author | SHA1 | Date |
|---|---|---|
|
|
5a6a65c04f |
|
|
@ -0,0 +1,25 @@
|
||||||
|
cmake_minimum_required(VERSION 3.10.0)
|
||||||
|
project(test_project)
|
||||||
|
include(FetchContent)
|
||||||
|
if (MSVC)
|
||||||
|
add_compile_options(/utf-8)
|
||||||
|
endif()
|
||||||
|
FetchContent_Declare(
|
||||||
|
googletest
|
||||||
|
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
|
||||||
|
)
|
||||||
|
# For Windows: Prevent overriding the parent project's compiler/linker settings
|
||||||
|
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||||
|
FetchContent_MakeAvailable(googletest)
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
|
||||||
|
|
||||||
|
include(CTest)
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
add_executable(test_project TestOpenApiConfig.cpp ../src/main/java/com/example/demo/config/OpenApiConfig.java)
|
||||||
|
|
||||||
|
target_link_libraries(test_project gtest gmock gtest_main)
|
||||||
|
include(GoogleTest)
|
||||||
|
gtest_discover_tests(test_project)
|
||||||
|
|
@ -0,0 +1,116 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
#include <string>
|
||||||
|
#include <regex>
|
||||||
|
|
||||||
|
// 模拟 OpenAPI 相关类,避免外部头文件依赖
|
||||||
|
class License {
|
||||||
|
public:
|
||||||
|
std::string m_name;
|
||||||
|
std::string m_url;
|
||||||
|
License& name(const std::string& n) { m_name = n; return *this; }
|
||||||
|
License& url(const std::string& u) { m_url = u; return *this; }
|
||||||
|
std::string getName() const { return m_name; }
|
||||||
|
std::string getUrl() const { return m_url; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Contact {
|
||||||
|
public:
|
||||||
|
std::string m_name;
|
||||||
|
std::string m_email;
|
||||||
|
Contact& name(const std::string& n) { m_name = n; return *this; }
|
||||||
|
Contact& email(const std::string& e) { m_email = e; return *this; }
|
||||||
|
std::string getName() const { return m_name; }
|
||||||
|
std::string getEmail() const { return m_email; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class Info {
|
||||||
|
public:
|
||||||
|
std::string m_title;
|
||||||
|
std::string m_version;
|
||||||
|
std::string m_description;
|
||||||
|
Contact m_contact;
|
||||||
|
License m_license;
|
||||||
|
Info& title(const std::string& t) { m_title = t; return *this; }
|
||||||
|
Info& version(const std::string& v) { m_version = v; return *this; }
|
||||||
|
Info& description(const std::string& d) { m_description = d; return *this; }
|
||||||
|
Info& contact(const Contact& c) { m_contact = c; return *this; }
|
||||||
|
Info& license(const License& l) { m_license = l; return *this; }
|
||||||
|
std::string getTitle() const { return m_title; }
|
||||||
|
std::string getVersion() const { return m_version; }
|
||||||
|
std::string getDescription() const { return m_description; }
|
||||||
|
Contact getContact() const { return m_contact; }
|
||||||
|
License getLicense() const { return m_license; }
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpenAPI {
|
||||||
|
public:
|
||||||
|
Info m_info;
|
||||||
|
OpenAPI& info(const Info& i) { m_info = i; return *this; }
|
||||||
|
Info getInfo() const { return m_info; }
|
||||||
|
};
|
||||||
|
|
||||||
|
// 待测配置类
|
||||||
|
class OpenApiConfig {
|
||||||
|
public:
|
||||||
|
OpenAPI customOpenAPI() {
|
||||||
|
Contact contact;
|
||||||
|
contact.name("开发团队").email("dev@example.com");
|
||||||
|
License license;
|
||||||
|
license.name("Apache 2.0").url("https://www.apache.org/licenses/LICENSE-2.0");
|
||||||
|
Info info;
|
||||||
|
info.title("综合管理信息系统 API")
|
||||||
|
.version("1.0.0")
|
||||||
|
.description("综合管理信息系统后端接口文档,涵盖用户管理、角色管理、部门管理、"
|
||||||
|
"字典管理、参数配置、业务管理、统计分析、权限管理、审计日志及接口集成等模块。")
|
||||||
|
.contact(contact)
|
||||||
|
.license(license);
|
||||||
|
OpenAPI api;
|
||||||
|
api.info(info);
|
||||||
|
return api;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpenApiConfigTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
OpenApiConfig config;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 正常输入测试:验证返回的 OpenAPI 对象各字段是否正确
|
||||||
|
TEST_F(OpenApiConfigTest, testCustomOpenAPI_ReturnsCorrectInfo) {
|
||||||
|
OpenAPI api = config.customOpenAPI();
|
||||||
|
const Info& info = api.getInfo();
|
||||||
|
EXPECT_EQ(info.getTitle(), "综合管理信息系统 API");
|
||||||
|
EXPECT_EQ(info.getVersion(), "1.0.0");
|
||||||
|
EXPECT_EQ(info.getDescription(),
|
||||||
|
"综合管理信息系统后端接口文档,涵盖用户管理、角色管理、部门管理、"
|
||||||
|
"字典管理、参数配置、业务管理、统计分析、权限管理、审计日志及接口集成等模块。");
|
||||||
|
|
||||||
|
const Contact& contact = info.getContact();
|
||||||
|
EXPECT_EQ(contact.getName(), "开发团队");
|
||||||
|
EXPECT_EQ(contact.getEmail(), "dev@example.com");
|
||||||
|
|
||||||
|
const License& license = info.getLicense();
|
||||||
|
EXPECT_EQ(license.getName(), "Apache 2.0");
|
||||||
|
EXPECT_EQ(license.getUrl(), "https://www.apache.org/licenses/LICENSE-2.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 边界值测试:版本号格式必须符合语义化版本
|
||||||
|
TEST_F(OpenApiConfigTest, testCustomOpenAPI_VersionFormat) {
|
||||||
|
OpenAPI api = config.customOpenAPI();
|
||||||
|
std::string version = api.getInfo().getVersion();
|
||||||
|
std::regex versionPattern(R"(\d+\.\d+\.\d+)");
|
||||||
|
EXPECT_TRUE(std::regex_match(version, versionPattern));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 边界值测试:描述信息非空
|
||||||
|
TEST_F(OpenApiConfigTest, testCustomOpenAPI_DescriptionNotNull) {
|
||||||
|
OpenAPI api = config.customOpenAPI();
|
||||||
|
EXPECT_FALSE(api.getInfo().getDescription().empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 特殊场景测试:多次调用返回不同对象(每次都是新实例)
|
||||||
|
TEST_F(OpenApiConfigTest, testCustomOpenAPI_MultipleCallsReturnDifferentObjects) {
|
||||||
|
OpenAPI api1 = config.customOpenAPI();
|
||||||
|
OpenAPI api2 = config.customOpenAPI();
|
||||||
|
EXPECT_NE(&api1, &api2);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue