Tôi đã viết một hàm mở trình soạn thảo vim với tên tệp đã cho khi được gọi .. Làm thế nào tôi có thể thực hiện loại bỏ các loại hoạt động này ...đơn vị thử nghiệm một hàm python mà gọi một quy trình con vim
Trả lời
Để đơn vị kiểm tra một cái gì đó như thế này, bạn phải giả lập/stub ra phụ thuộc của bạn. Trong trường hợp này, hãy nói rằng bạn đang khởi động vim bằng cách gọi os.system ("vim").
Trong thử nghiệm đơn vị của bạn, bạn có thể còn sơ khai ra rằng chức năng cuộc gọi làm một cái gì đó như:
def launchVim():
os.system("vim")
def testThatVimIsLaunched():
try:
realSystem = os.system
called = []
def stubSystem(command):
if command == "vim":
called.append(True)
os.system = stubSystem
launchVim() # function under test
assert(called == [True])
finally:
os.system = realSystem
Để biết thêm chi tiết về chế giễu và stubbing hãy nhìn vào this article
Cập nhật: Tôi thêm try/cuối cùng để khôi phục chức năng hệ thống ban đầu theo đề xuất của Dave Kirby
Đây không còn là việc hủy kiểm tra nhưng tích hợp. Tại sao bạn cần khởi động vim? Thông thường, bạn sẽ 'mô phỏng' điều này, mô phỏng quá trình sinh sản và phụ thuộc vào thực tế là mô-đun con xử lý con trăn được kiểm tra tốt.
Để thực hiện điều này trong mã của bạn, bạn có thể, ví dụ, phân lớp lớp thực hiện chức năng của bạn và ghi đè phương thức chịu trách nhiệm sinh sản. Sau đó kiểm tra phân lớp này. I E.
class VimSpawner(object): # your actual code, to be tested
...
def spawn(self):
... do subprocess magic
def other_logic(self):
...
self.spawn()
class TestableVimSpawner(VimSpawner):
def spawn(self):
... mock the spawning
self.ididit = True
class Test(..):
def test_spawning(self):
t = TestableVimSpawner()
t.other_logic()
self.failUnless(t.ididit)
'iditit' là gì ? – GiantsLoveDeathMetal
Đó là lỗi đánh máy :-) –
Bạn vẫn không chắc chắn nó là gì? – GiantsLoveDeathMetal
- 1. Quy tắc thử nghiệm đơn vị
- 2. Python CLI đơn vị chương trình thử nghiệm
- 3. Khẳng định rằng một phương pháp được gọi trong một thử nghiệm đơn vị Python
- 4. Kiểm tra nếu một hàm được gọi trong thử nghiệm đơn vị Ruby on Rails
- 5. Đơn vị thử nghiệm một trình biên dịch
- 6. Làm cách nào để mã đơn vị thử nghiệm tạo một Quy trình mới?
- 7. Đơn vị/Thử nghiệm tự động trong một hệ thống quy trình làm việc
- 8. trình cài đặt thử nghiệm đơn vị
- 9. Đơn vị Thử nghiệm một lớp học với một hàm tạo nội bộ
- 10. mùi thử nghiệm đơn vị
- 11. quy ước đặt tên gói thử nghiệm đơn vị
- 12. Thử nghiệm đơn vị một thuật toán phức tạp
- 13. Đơn vị thử nghiệm trang trí bằng Python
- 14. Quy ước đặt tên thử nghiệm đơn vị Python cho các chức năng mô-đun
- 15. Icefaces thử nghiệm đơn vị
- 16. Đơn vị thử nghiệm một hàm trả về một đối tượng phát
- 17. Mã thử nghiệm đơn vị gọi các phương thức tĩnh
- 18. Đơn vị thử nghiệm một lớp ứng dụng Flask
- 19. Thử nghiệm đơn vị với số đơn
- 20. Đơn vị thử nghiệm một phương pháp điều khiển?
- 21. Chế nhạo HTTPResponse trong một thử nghiệm đơn vị
- 22. Thử nghiệm Đơn vị XNA
- 23. Thử nghiệm đơn vị thử nghiệm Javascript Sandbox
- 24. Chương trình MPI thử nghiệm đơn vị có gtest
- 25. C# Lớp thử nghiệm đơn vị với một hàm tạo riêng?
- 26. thử nghiệm đơn vị mô-đun javascript
- 27. Thử nghiệm đơn vị sơ bộ
- 28. Thử nghiệm đơn vị hộp đen
- 29. đơn vị thử nghiệm một phương pháp nhà máy
- 30. Đơn vị thử nghiệm một ứng dụng chính-flask
Nếu bạn thực hiện việc này, hãy đảm bảo bạn thực hiện cuộc gọi: thử: cuối cùng: chặn hoặc sử dụng thiết lập & tearDown để khôi phục os.system ban đầu sau đó. Nếu không, bạn cuối cùng sẽ viết một bài kiểm tra trong một phần không liên quan của bộ thử nghiệm của bạn mà cố gắng gọi os.system thực và được gãi đầu tự hỏi tại sao nó không hoạt động. –
Khỉ-vá theo cách này là khá phức tạp. Nếu mã được chế nhạo đã được giữ một tham chiếu đến os.system trước khi bạn vá nó, bản vá sẽ không có hiệu ứng mong muốn. Ngoài ra, đây chính xác là những gì mà gói (đã được xây dựng sẵn) hiện ra, vì vậy hãy sử dụng thay thế :) Nhưng giải pháp của tôi dưới đây mô tả cách kiểm tra mã mà không cần vá bất kỳ ở tất cả –