Hướng dẫn how do you use assertraises in python? - làm thế nào để bạn sử dụng khẳng định trong python?

16

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng thực hiện một bài kiểm tra đơn giản trong Python bằng cách sử dụng Unittest, để xem liệu một lớp có ném một ngoại lệ hay không nếu nó nhận được đầu vào không phù hợp cho hàm tạo. Lớp học trông như thế này:

class SummaryFormula:
    def __init__( self, summaryFormula):
        self.atoms = {}
        for atom in re.finditer( "([A-Z][a-z]{0,2})(\d*)", summaryFormula):
            symbol = atom.group(1)
            count = atom.group(2)

            if pocet != "":
                self.atoms[ symbol] = int(count)
            else:
                self.atoms[ symbol] = 1

Bài kiểm tra của tôi theo sau:

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()

Tất cả những gì tôi muốn là bài kiểm tra thất bại, có nghĩa là ngoại trừ đầu vào không phù hợp cho hàm tạo không được xử lý.

Thay vào đó, tôi gặp lỗi: __init__() takes exactly 2 arguments (1 given).

Tôi còn thiếu gì? Đối số thứ hai tôi nên chỉ định là gì?

Ngoài ra, loại lỗi nào tôi nên sử dụng để xử lý ngoại lệ mà một đầu vào không thể phù hợp bởi regexp của tôi đã được chuyển cho hàm tạo?

Cảm ơn bạn, Tomas

Hướng dẫn how do you use assertraises in python? - làm thế nào để bạn sử dụng khẳng định trong python?

Silentghost

295K64 Huy hiệu vàng301 Huy hiệu bạc291 Huy hiệu Đồng64 gold badges301 silver badges291 bronze badges

Đã hỏi ngày 6 tháng 10 năm 2010 lúc 21:44Oct 6, 2010 at 21:44

Tomas Novotnytomas NovotnyTomas Novotny

6.9079 Huy hiệu vàng25 Huy hiệu bạc23 Huy hiệu đồng9 gold badges25 silver badges23 bronze badges

3

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()
0 có một chút khó hiểu, bởi vì bạn cần phải cho nó có thể gọi được, không phải là một biểu thức tạo ra cuộc gọi.

Thay đổi mã của bạn thành:

self.assertRaises(TypeError, ukol1.SummaryFormula, "testtest")

Trong mã của bạn, bạn đang tự gọi nhà xây dựng và nó đặt ra một ngoại lệ về việc không có đủ đối số. Thay vào đó, bạn cần cung cấp cho

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()
0 có thể gọi được (ukol1.summaryformula) và các đối số để gọi nó với ("testtest"). Sau đó, nó có thể gọi nó, bắt và kiểm tra ngoại lệ.

Đã trả lời ngày 6 tháng 10 năm 2010 lúc 21:52Oct 6, 2010 at 21:52

Ned Batchelderned BatchelderNed Batchelder

352K71 Huy hiệu vàng552 Huy hiệu bạc650 Huy hiệu Đồng71 gold badges552 silver badges650 bronze badges

Đó là bởi vì lớp của bạn yêu cầu một tham số trong khi khởi tạo đối tượng

Trong khi bạn đang đi qua

ukol1.SummaryFormula()

Bạn nên chuyển Tóm tắt tham số cho nó.

ukol1.SummaryFormula(someSummaryFormula)

Ngoài ra sự nhầm lẫn là do tên lớp của bạn là Tóm tắt và tham số mà bạn chuyển đến

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()
2 cũng là SummaryFormula

hoặc điều này nên

self.assertRaises(TypeError, ukol1.SummaryFormula, "testtest")

Đã trả lời ngày 6 tháng 10 năm 2010 lúc 21:46Oct 6, 2010 at 21:46

Pyfuncpyfuncpyfunc

63,9K15 Huy hiệu vàng146 Huy hiệu bạc135 Huy hiệu Đồng15 gold badges146 silver badges135 bronze badges

2

Vì không có câu trả lời nào khác về cách bạn có thể sử dụng ngữ cảnh gói gọn mã gây ra ngoại lệ, đây là cách bạn có thể làm điều đó.

with self.assertRaises(ValueError) as ctx:
    

expected_msg = 'foo_bar_baz'
self.assertEquals(ctx.exception.message, expected_msg)

Các thuộc tính quan tâm trong

    class ConstructorTestCase(unittest.TestCase):
      def testEmptyString(self):
        self.assertRaises(TypeError, ukol1.SummaryFormula(), "testtest")

    if __name__ == '__main__':
      unittest.main()
3 này, là:

  • ngoại lệ
  • kỳ vọng
  • expected_regexp
  • Thất bại

Đã trả lời ngày 7 tháng 8 năm 2017 lúc 10:08Aug 7, 2017 at 10:08

Hướng dẫn how do you use assertraises in python? - làm thế nào để bạn sử dụng khẳng định trong python?

Debosmit Raydebosmit RayDebosmit Ray

5.1082 Huy hiệu vàng27 Huy hiệu bạc42 Huy hiệu Đồng2 gold badges27 silver badges42 bronze badges

1

Một định dạng thay thế có kích thước hơn là

args=['testtest']
kwargs = {}
self.assertRaises(TypeError, ukol1.SummaryFormula, *args, **kwargs)

Điều này rất hữu ích nếu hàm tạo của bạn là đa hình và bạn muốn lặp qua một danh sách các cách khác nhau để viết sai các đối số, ví dụ:

arg_lists = [
    ['testtest'],
    ['anothertest'],
    ['YAT'],
]
for args in arg_lists:
    self.assertRaises(TypeError, ukol1.SummaryFormula, *args)

Đã trả lời ngày 30 tháng 12 năm 2013 lúc 19:51Dec 30, 2013 at 19:51

Sarah Messersarah MesserSarah Messer

2.87723 huy hiệu bạc40 huy hiệu đồng23 silver badges40 bronze badges

Làm cách nào để mã hóa một bài kiểm tra đơn vị trong Python?

unittest..
Nhập bất hợp pháp từ thư viện tiêu chuẩn ..
Tạo một lớp gọi là TestSum kế thừa từ lớp TestCase ..
Chuyển đổi các chức năng kiểm tra thành các phương thức bằng cách thêm bản thân làm đối số đầu tiên ..
Thay đổi các xác nhận để sử dụng bản thân. ....
Thay đổi điểm nhập dòng lệnh để gọi Unittest ..

Làm thế nào để bạn thực hiện nhiều trường hợp thử nghiệm trong Python?

Bạn có thể chỉ cần sử dụng một vòng lặp trong thời gian hoặc hàm phạm vi của Python.

Làm thế nào để bạn thực hiện một trường hợp thử nghiệm trong Python?

TestCase được sử dụng để tạo các trường hợp kiểm tra bằng cách phân lớp nó.Khối cuối cùng của mã ở phía dưới cho phép chúng tôi chạy tất cả các thử nghiệm chỉ bằng cách chạy tệp.Các thuật ngữ cơ bản được sử dụng trong mã: AsserTequal () - Câu lệnh này được sử dụng để kiểm tra xem kết quả thu được có bằng kết quả dự kiến không.. The last block of the code at the bottom allows us to run all the tests just by running the file. Basic terms used in the code : assertEqual() – This statement is used to check if the result obtained is equal to the expected result.

Làm cách nào để kiểm tra một chức năng trong Python?

Đầu tiên bạn cần tạo một tệp kiểm tra.Sau đó nhập mô -đun Unittest, xác định lớp thử nghiệm kế thừa từ Unittest.TestCase, và cuối cùng, viết một loạt các phương pháp để kiểm tra tất cả các trường hợp hành vi của chức năng của bạn.Đầu tiên, bạn cần nhập một chức năng nhất và chức năng bạn muốn kiểm tra, định dạng_name ().