NX Lab

Unit test phần logic thuần Python bằng unittest — chạy ngoài NX, không cần giấy phép

#Python#Kiểm thử1 lượt xem

  1. Quản trị viênQuản trị· 0 điểm

    Câu hỏi ·

    Các hàm toán hình học, định dạng tên file, tăng revision không cần NX để chạy. Tách chúng thành module thuần rồi kiểm thử bằng unittest ngay trên máy phát triển, nhanh và miễn phí.

    Unit test phần logic thuần Python bằng… Unit test phần logic thuần Python bằng…

    Các bước thực hiện

    1. Tách hàm thuần. Không import NXOpen trong module này.
    2. Viết test. Mỗi hàm vài trường hợp thường, biên, lỗi.
    3. Chạy test. python -m unittest discover tests.
    4. Chạy trước mỗi phát hành. Có thể gắn vào Git hook.
    5. Thêm test khi sửa lỗi. Mỗi lỗi đã gặp trở thành một test.

    Code tham khảo (Python)

    # --- lib/hinh_hoc.py : không import NXOpen ---
    import math
    
    def goc_giua_hai_vecto(a, b):
        """Góc (độ) giữa hai vectơ 3 chiều dạng tuple."""
        dai_a = math.sqrt(sum(x * x for x in a))
        dai_b = math.sqrt(sum(x * x for x in b))
        if dai_a == 0 or dai_b == 0:
            raise ValueError("Vectơ có độ dài 0")
        c = sum(x * y for x, y in zip(a, b)) / (dai_a * dai_b)
        return math.degrees(math.acos(max(-1.0, min(1.0, c))))
    
    def tang_rev(rev):
        rev = (rev or "").strip().upper()
        if not rev:
            return "A"
        chu, i = list(rev), len(rev) - 1
        while i >= 0:
            if chu[i] != "Z":
                chu[i] = chr(ord(chu[i]) + 1)
                return "".join(chu)
            chu[i] = "A"
            i -= 1
        return "A" + "".join(chu)
    
    # --- tests/test_hinh_hoc.py ---
    import unittest
    
    class TestHinhHoc(unittest.TestCase):
        def test_goc_vuong(self):
            self.assertAlmostEqual(goc_giua_hai_vecto((1, 0, 0), (0, 1, 0)), 90.0, places=6)
    
        def test_goc_cung_huong(self):
            self.assertAlmostEqual(goc_giua_hai_vecto((2, 0, 0), (5, 0, 0)), 0.0, places=6)
    
        def test_vecto_khong(self):
            with self.assertRaises(ValueError):
                goc_giua_hai_vecto((0, 0, 0), (1, 0, 0))
    
        def test_tang_rev(self):
            self.assertEqual(tang_rev(""), "A")
            self.assertEqual(tang_rev("A"), "B")
            self.assertEqual(tang_rev("Z"), "AA")
            self.assertEqual(tang_rev("AZ"), "BA")
    
    if __name__ == "__main__":
        unittest.main()
    

    Giải thích code

    • assertAlmostEqual so sánh số thực có sai số; đừng dùng assertEqual với số thực.
    • Test bắt ngoại lệ bằng assertRaises bảo đảm hàm báo lỗi đúng kiểu khi đầu vào sai.
    • Hai phần trong cùng khối chỉ để minh họa; khi dùng thật hãy tách thành hai file.

    Lỗi thường gặp

    • Module có import NXOpen ở đầu file không import được ngoài NX; để các import đó vào bên trong hàm hoặc tách module.
    • Test chỉ chứng minh logic thuần đúng, không thay cho test trong NX với dữ liệu thật.

    Code mang tính tham khảo, viết cho NX 12 trở lên (Python journal). Tên menu và một số lớp có thể khác theo phiên bản NX; hãy chạy thử trên bản sao của chi tiết trước khi dùng cho dữ liệu thật.

    Điểm: 0

Trả lời

Đăng nhập để tham gia thảo luận.