Files
cangku/test/test_unit_conversion.py
liangweihao 8aa1a5ac91 添加PyQt GUI自动化测试套件
新增5个GUI测试模块,覆盖所有主要功能:
- test_login_gui.py: 登录和密码管理测试(7个测试)
- test_stock_gui.py: 库存管理测试(4个测试)
- test_raw_material_gui.py: 原料管理测试(7个测试)
- test_garment_gui.py: 款式管理测试(2个测试)
- test_purchase_order_gui.py: 采购单生成测试(2个测试)

测试特点:
- 真实GUI交互测试(填写表单、点击按钮、搜索过滤)
- 业务逻辑验证(重复数据拒绝、空值验证、计算正确性)
- 独立测试环境(临时数据库,自动清理)
- 自动化消息框(Mock QMessageBox)

总计22个GUI测试,全部通过 ✓

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-27 16:52:30 +08:00

143 lines
4.1 KiB
Python

"""
单位转换测试
"""
import unittest
import math
YARD_TO_METER = 0.9144
def convert_meter_to_yard(meters):
return meters / YARD_TO_METER
def convert_yard_to_meter(yards):
return yards * YARD_TO_METER
def convert_meter_to_kg(meters, width_cm, gsm):
return meters * (width_cm / 100) * (gsm / 1000)
def convert_yard_to_kg(yards, width_cm, gsm):
meters = yards * YARD_TO_METER
return meters * (width_cm / 100) * (gsm / 1000)
def convert_kg_to_meter(kg, width_cm, gsm):
return kg / ((width_cm / 100) * (gsm / 1000))
def convert_kg_to_yard(kg, width_cm, gsm):
meters = kg / ((width_cm / 100) * (gsm / 1000))
return meters / YARD_TO_METER
class TestMeterYardConversion(unittest.TestCase):
def test_meter_to_yard(self):
result = convert_meter_to_yard(1)
self.assertAlmostEqual(result, 1.0936, places=4)
def test_yard_to_meter(self):
result = convert_yard_to_meter(1)
self.assertAlmostEqual(result, 0.9144, places=4)
def test_meter_yard_roundtrip(self):
original = 10.5
yards = convert_meter_to_yard(original)
back = convert_yard_to_meter(yards)
self.assertAlmostEqual(original, back, places=6)
def test_yard_meter_roundtrip(self):
original = 15.3
meters = convert_yard_to_meter(original)
back = convert_meter_to_yard(meters)
self.assertAlmostEqual(original, back, places=6)
class TestLengthToWeightConversion(unittest.TestCase):
def setUp(self):
self.width_cm = 150
self.gsm = 200
def test_meter_to_kg(self):
result = convert_meter_to_kg(10, self.width_cm, self.gsm)
expected = 10 * 1.5 * 0.2
self.assertAlmostEqual(result, expected, places=6)
def test_yard_to_kg(self):
result = convert_yard_to_kg(10, self.width_cm, self.gsm)
meters = 10 * YARD_TO_METER
expected = meters * 1.5 * 0.2
self.assertAlmostEqual(result, expected, places=6)
def test_kg_to_meter(self):
result = convert_kg_to_meter(3, self.width_cm, self.gsm)
expected = 3 / (1.5 * 0.2)
self.assertAlmostEqual(result, expected, places=6)
def test_kg_to_yard(self):
result = convert_kg_to_yard(3, self.width_cm, self.gsm)
meters = 3 / (1.5 * 0.2)
expected = meters / YARD_TO_METER
self.assertAlmostEqual(result, expected, places=6)
class TestRoundtripConversion(unittest.TestCase):
def setUp(self):
self.width_cm = 140
self.gsm = 180
def test_meter_kg_roundtrip(self):
original = 25.5
kg = convert_meter_to_kg(original, self.width_cm, self.gsm)
back = convert_kg_to_meter(kg, self.width_cm, self.gsm)
self.assertAlmostEqual(original, back, places=6)
def test_yard_kg_roundtrip(self):
original = 30.0
kg = convert_yard_to_kg(original, self.width_cm, self.gsm)
back = convert_kg_to_yard(kg, self.width_cm, self.gsm)
self.assertAlmostEqual(original, back, places=6)
class TestEdgeCases(unittest.TestCase):
def test_zero_value(self):
self.assertEqual(convert_meter_to_yard(0), 0)
self.assertEqual(convert_yard_to_meter(0), 0)
self.assertEqual(convert_meter_to_kg(0, 150, 200), 0)
def test_large_value(self):
result = convert_meter_to_yard(10000)
self.assertAlmostEqual(result, 10000 / YARD_TO_METER, places=2)
def test_small_value(self):
result = convert_meter_to_yard(0.001)
self.assertAlmostEqual(result, 0.001 / YARD_TO_METER, places=8)
class TestPriceConversion(unittest.TestCase):
def test_price_per_meter_to_yard(self):
price_per_meter = 10.0
price_per_yard = price_per_meter * YARD_TO_METER
self.assertAlmostEqual(price_per_yard, 9.144, places=3)
def test_price_per_kg_to_meter(self):
price_per_kg = 50.0
width_cm = 150
gsm = 200
kg_per_meter = (width_cm / 100) * (gsm / 1000)
price_per_meter = price_per_kg * kg_per_meter
self.assertAlmostEqual(price_per_meter, 15.0, places=6)
if __name__ == '__main__':
unittest.main()