/** * @file basic_test.cpp * @brief 商城系统单元测试,使用标准库 assert,无外部依赖。 */ #include "product.hpp" #include "shopping_cart.hpp" #include "order.hpp" #include #include #include /** * @brief 测试商品类的构造与基本接口。 */ static void testProduct() { Product p(1001, "Test Book", 29.99, 50); assert(p.getId() == 1001); assert(p.getName() == "Test Book"); assert(std::abs(p.getPrice() - 29.99) < 0.001); assert(p.getStock() == 50); assert(p.reduceStock(10) == true); assert(p.getStock() == 40); assert(p.reduceStock(100) == false); // 库存不足 assert(p.getStock() == 40); p.addStock(5); assert(p.getStock() == 45); // toString 不应为空 assert(!p.toString().empty()); std::cout << "[PASS] testProduct\n"; } /** * @brief 测试购物车类的添加、移除、清空、总价。 */ static void testShoppingCart() { Product p1(2001, "Item A", 10.0, 100); Product p2(2002, "Item B", 20.0, 100); ShoppingCart cart; assert(cart.isEmpty()); assert(cart.itemCount() == 0); assert(std::abs(cart.totalPrice() - 0.0) < 0.001); cart.addItem(p1, 2); cart.addItem(p2, 3); assert(!cart.isEmpty()); assert(cart.itemCount() == 2); assert(std::abs(cart.totalPrice() - (10.0*2 + 20.0*3)) < 0.001); // 再次添加相同商品应累加数量 cart.addItem(p1, 1); assert(cart.itemCount() == 2); assert(std::abs(cart.totalPrice() - (10.0*3 + 20.0*3)) < 0.001); // 移除商品 assert(cart.removeItem(2001) == true); assert(cart.itemCount() == 1); // 修改数量 assert(cart.updateQuantity(2002, 5) == true); assert(std::abs(cart.totalPrice() - 20.0*5) < 0.001); // 修改不存在的商品 assert(cart.updateQuantity(9999, 1) == false); // 清空 cart.clear(); assert(cart.isEmpty()); std::cout << "[PASS] testShoppingCart\n"; } /** * @brief 测试订单类的创建与状态。 */ static void testOrder() { Product p1(3001, "Book", 25.0, 10); Product p2(3002, "Pen", 3.5, 50); ShoppingCart cart; cart.addItem(p1, 2); cart.addItem(p2, 4); Order order(9001, cart); assert(order.getOrderId() == 9001); assert(order.getStatus() == OrderStatus::Pending); assert(order.getItems().size() == 2); assert(std::abs(order.totalPrice() - (25.0*2 + 3.5*4)) < 0.001); // 确认购物车已被清空 assert(cart.isEmpty()); // 修改订单状态 order.setStatus(OrderStatus::Paid); assert(order.getStatus() == OrderStatus::Paid); // 订单摘要不为空 assert(!order.toString().empty()); std::cout << "[PASS] testOrder\n"; } /** * @brief 测试 orderStatusToString 枚举转换。 */ static void testOrderStatusString() { assert(orderStatusToString(OrderStatus::Pending) == "\xe5\xbe\x85\xe6\x94\xaf\xe4\xbb\x98"); assert(orderStatusToString(OrderStatus::Delivered) == "\xe5\xb7\xb2\xe9\x80\x81\xe8\xbe\xbe"); std::cout << "[PASS] testOrderStatusString\n"; } /** * @brief 运行所有测试。 */ int main() { testProduct(); testShoppingCart(); testOrder(); testOrderStatusString(); std::cout << "\n===== \xe5\x85\xa8\xe9\x83\xa8\xe6\xb5\x8b\xe8\xaf\x95\xe9\x80\x9a\xe8\xbf\x87! =====\n"; // 全部测试通过! return 0; }