2013-11-01 12 views
11

Tôi quen thuộc với các thư viện giả mạo khác bằng các ngôn ngữ khác như Mockito trong Java, nhưng thư viện mock của Python làm xáo trộn cuộc sống của tôi.Mocking chỉ một phương thức duy nhất trên một đối tượng

Tôi có lớp học sau mà tôi muốn kiểm tra.

class MyClassUnderTest(object): 

    def submethod(self, *args): 
     do_dangerous_things() 

    def main_method(self): 
     self.submethod("Nothing.") 

Trong các thử nghiệm của tôi, tôi muốn chắc chắn rằng submethod được gọi khi main_method được thực hiện và nó được gọi với các đối số đúng. Tôi không muốn submethod chạy, vì nó làm những việc nguy hiểm.

Tôi hoàn toàn không chắc chắn về cách bắt đầu với điều này. Tài liệu của Mock vô cùng khó hiểu và tôi không chắc phải làm gì hay làm thế nào để giả lập nó.

Làm cách nào tôi có thể thử chức năng submethod, trong khi chỉ rời khỏi chức năng ở một mình là main_method?

Trả lời

15

Tôi nghĩ rằng những gì bạn đang tìm kiếm là mock.patch.object

with mock.patch.object(MyClassUnderTest, "submethod") as submethod_mocked: 
    submethod_mocked.return_value = 13 
    MyClassUnderTest().main_method() 
    submethod_mocked.assert_called_once_with(user_id, 100, self.context, 
              self.account_type) 

Dưới đây là mô tả nhỏ

patch.object(target, attribute, new=DEFAULT, 
       spec=None, create=False, spec_set=None, 
       autospec=None, new_callable=None, **kwargs) 

vá các thành viên mang tên (thuộc tính) trên một đối tượng (mục tiêu) với một đối tượng giả .

+0

Cảm ơn, vì một lý do nào đó, tôi đã gặp khó khăn trong việc hiểu tất cả các phương pháp 'vá' khác nhau và cách sử dụng chúng. –

+0

ok. Hãy hỏi tôi – oleg

Các vấn đề liên quan