2012-10-09 28 views
5

Tôi đã viết một kịch bản lệnh python nhận các đối số dòng lệnh và chơi một vòng của Tic Tac Toe.
chạy nó trông như thế này ...python, unittest, kiểm tra một tập lệnh với dòng lệnh args

chạy ttt o # xo ## x ## x 0 1

Nếu di chuyển là hợp pháp thì nó in bố trí hội đồng quản trị mới và cho dù ai thắng trò chơi

Tôi phải viết kiểm tra cho nó bằng cách sử dụng không nhất thiết. Tôi không biết làm thế nào để kiểm tra toàn bộ kịch bản với các tham số dòng lệnh khác nhau, tất cả các ví dụ tôi đã thấy dường như chỉ kiểm tra các chức năng riêng lẻ trong kịch bản. Ngoài ra, tập lệnh sử dụng argparse để phân tích cú pháp các tham số

Cảm ơn!

+1

[Viết bài kiểm tra đơn vị bằng Python: Làm cách nào để bắt đầu?] (Http://stackoverflow.com/questions/3371255/writing-unit-tests-in-python-how-do-i-start) –

+0

@Pedro Vâng, tôi đã đọc những thứ đó, nhưng tất cả dường như là về các chức năng thử nghiệm. Tôi không biết nếu nó thậm chí có thể kiểm tra một kịch bản toàn bộ với các tham số dòng lệnh, ai đó ít nhất có thể nói nếu nó có thể? –

+0

Điều này có thể được nhiều hơn trong tĩnh mạch của những gì bạn đang tìm kiếm: [Kiểm tra Python Scripts] (http://stackoverflow.com/questions/5974557/testing-python-scripts). –

Trả lời

10

Refactor chương trình của bạn để hành động chính của nó (trừ argparsing) xảy ra trong một chức năng "chính":

def main(args): 
    ... 

if __name__ == '__main__': 
    args = parse_args() 
    main(args) 

Sau đó, bạn có thể viết các bài kiểm tra về hành vi của mainparse_args.

PS. Có thể sử dụng mô-đun subprocess để gọi chương trình của bạn dưới dạng một quy trình bên ngoài và sau đó phân tích cú pháp đầu ra, nhưng tôi nghĩ điều đó sẽ xấu hơn và không cần thiết.

PPS. Là một lợi ích bổ sung của việc viết chương trình của bạn theo cách này, bạn sẽ có thể nhập chương trình của mình làm mô-đun và gọi hàm chính của nó trong các tập lệnh khác. Điều đó có thể hữu ích nếu, ví dụ, một ngày nào đó bạn muốn xây dựng một GUI cho nó.

+0

Điều này hoạt động nếu bạn có một kịch bản chỉ có một điểm cuối dòng lệnh (đó là trường hợp cho OP). Nếu bạn có nhiều điểm cuối, bạn phải sử dụng một chiến lược khác. –

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