2013-12-11 13 views
8

Tôi đã hỏi this câu hỏi về cách viết một pytest để kiểm tra kết xuất trong stdout và nhận giải pháp. Bây giờ tôi cần phải viết một test case, để kiểm tra xem các nội dung được ghi vào tập tin và nội dung được viết như mong đợi ví dụ:viết một hàm pytest để kiểm tra xuất ra một tệp trong python?

def writetoafile(): 
    file = open("output.txt",w) 
    file.write("hello\n") 
    file.write("world\n") 
    file.close() 

bây giờ là một chức năng pytest để kiểm tra xem nó viết:

def test_writeToFile(): 
    file = open("ouput.txt",'r') 
    expected = "hello\nworld\n" 
    assert expected==file.read() 

trong khi điều này dường như hoạt động, tôi không nghĩ rằng đây là lý tưởng, đặc biệt là mã hóa cứng. làm thế nào là những loại test functions của văn bản cho một tập tin thường được viết?

+0

Tại sao điều này không lý tưởng? Bạn đã viết bạn muốn kiểm tra nội dung được viết như mong đợi, do đó, nhìn vào tập tin và kiểm tra có vẻ là lựa chọn tốt nhất. Bạn luôn có thể tạo một biến với một chuỗi các ký tự ngẫu nhiên và kiểm tra xem nó có được viết thành công hay không; bạn có thể kiểm tra "mong đợi trong file.read()" để xem liệu dữ liệu đã được thêm vào chưa (nhưng bạn đã sử dụng cờ 'w' vì vậy đó là một thử nghiệm xấu ở đây); vv Bạn muốn kiểm tra điều gì nếu không phải điều này? Có lẽ biết những gì bạn muốn là câu hỏi thực sự ở đây, như trong hầu hết các bài kiểm tra. –

Trả lời

12

tmpdir fixture sẽ tạo cho bạn một thư mục tạm thời cho mỗi kiểm tra. Vì vậy, một thử nghiệm sẽ trông giống như sau:

def writetoafile(fname): 
    with open(fname, 'w') as fp: 
     fp.write('Hello\n') 

def test_writetofile(tmpdir): 
    file = tmpdir.join('output.txt') 
    writetoafile(file.strpath) # or use str(file) 
    assert file.read() == 'Hello\n' 

Đây là ví dụ điển hình về cách kiểm tra mã giúp bạn thiết kế mã tốt hơn.

+0

tmpdir làm gì? do đó, nó tạo ra một tập tin hầu như trong bộ nhớ? –

+1

Nó tạo ra một thư mục thực mà bạn có thể kiểm tra sau đó, trên UNIX bạn thường sẽ tìm thấy chúng trong '/ tmp/pytest-xxxx' với các liên kết đến lần chạy mới nhất. Bạn luôn có thể tìm hiểu về các đồ đạc bằng cách gọi 'py.test --fixtures' và đối với trường hợp tmpdir, vui lòng tham khảo http://pytest.org/latest/tmpdir.html để biết thêm chi tiết. – flub

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