2012-05-05 17 views
7

Hãy nói rằng tôi có những chức năng kiểm tra:Làm cách nào để bỏ qua thử nghiệm nếu thử nghiệm khác không thành công với py.test?

def test_function_one(): 
    assert # etc... 

def test_function_two(): 
    # should only run if test_function_one passes 
    assert # etc. 

Làm thế nào tôi có thể chắc chắn rằng test_function_two chỉ chạy nếu test_function_one đi (Tôi hy vọng rằng nó có thể)?

Chỉnh sửa: Tôi cần điều này vì thử nghiệm hai đang sử dụng thuộc tính thử nghiệm một xác minh.

+1

bạn có thể giải thích lý do tại sao bạn cần điều này? Bài kiểm tra đầu tiên có thiết lập thứ gì đó thứ hai sử dụng không? Nói chung là xấu. – loganfsmyth

+1

Đây thường là dấu hiệu của một thử nghiệm giòn, một thử nghiệm phụ thuộc vào nhiều thứ hơn đơn vị nó kiểm tra, bạn có chắc chắn * bạn cần phải làm điều này? Nó sẽ (có thể) tốt hơn để cấu trúc lại kiểm tra và/hoặc mã đang được thử nghiệm để tránh sự phụ thuộc này. –

+0

@loganfsmyth Không có thử nghiệm đầu tiên nào không thiết lập bất kỳ thứ gì, nhưng thử nghiệm thứ hai * có * sử dụng thuộc tính mà kiểm tra đầu tiên xác minh. –

Trả lời

0

Tôi nghĩ rằng đây là những gì bạn muốn:

def test_function(): 
    assert # etc... 
    assert # etc... 

này đáp ứng yêu cầu của bạn rằng "test" thứ hai (khẳng định) chỉ chạy nếu là người đầu tiên "thử nghiệm" (khẳng định) đi qua.

1

Tôi nghĩ rằng một giải pháp cho yout sẽ là giả lập giá trị mà test1 đang thiết lập. Các thử nghiệm lý tưởng nên độc lập, vì vậy hãy thử giả lập giá trị đó để bạn luôn có thể chạy test2 bất cứ khi nào bạn muốn, thực tế, bạn cũng nên mô phỏng các giá trị bẩn (giả) để bạn có thể xem test2 hoạt động như thế nào nếu nó nhận dữ liệu không mong muốn .

1

Bạn có thể sử dụng plugin cho pytest được gọi là pytest-dependency.

Mã này có thể trông như thế này:

import pytest 
import pytest_dependency 

@pytest.mark.dependency() #First test have to have mark too 
def test_function_one(): 
    assert 0, "Deliberate fail" 

@pytest.mark.dependency(depends=["test_function_one"]) 
def test_function_two(): 
    pass #but will be skipped because first function failed 
Các vấn đề liên quan