Compare commits
No commits in common. "test_20260708_165848" and "main" have entirely different histories.
test_20260
...
main
|
|
@ -1,25 +0,0 @@
|
||||||
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)
|
|
||||||
|
|
@ -1,116 +0,0 @@
|
||||||
#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