2017-01-26 1 views
2

나는 실패한 테스트를 가지고 있지만, 실패 할 것으로 예상하고 있으며, 패스라고 말하는 것은 pytest이다. 어떻게해야합니까?나는 실패한 테스트가 OK가되기를 원한다.

@pytest.mark.parametrize(
     "minimum, maximum, expected_min, expected_max", [ 
      (13, 15, 34, 45), 
      (30, 40, 30, 40), 
      ("sd", 3, 34, 45), 
     ]) 

I 받고 있어요 :

  • 실패 (

    예를 들어, 나는 최소값 = 30 최대 = 여기

    (40) 내가 뭘하는지의이 어설 션 오류)

  • 합격
  • 실패 (어설 션 오류)

모든 테스트가 통과되었다는 보고서를 받으려면 어떻게합니까?

+0

[단정 예상 대한 예외 (http://pytest.org/2.2.4/assert.html#assertions-about-expected-exceptions) – Tagc

+0

@Tagc :이 문제는 내가 반대 결과를 얻을 것이다. 통과, 실패, 합격. – George

+1

네, 입력을 두 그룹 ("유효"및 "유효하지 않은"경우)으로 나누고 각 그룹을 개별적으로 테스트해야합니다 (아래에서 frollo가 제안한 것처럼). – Tagc

답변

3

사용 사례에 따라 실질적인 예를 사용하여 frollo's answer을 빌드하려면 아래 코드를 고려하십시오. 원래 테스트 데이터 세트는 두 그룹으로 나뉩니다. 통과 할 것으로 예상되는 그룹과 실패 할 것으로 예상되는 그룹입니다. 이와 같은 단위 테스트는 한 가지 종류의 상황을 독립적으로 테스트해야하므로 각 테스트 사례를 작성하기가 쉬우 며 이해하기 쉽습니다.

import pytest 


class TestMinMax: 
    @pytest.mark.parametrize(
     "minimum, maximum, expected_min, expected_max", [ 
      (30, 40, 30, 40), 
     ]) 
    def test_valid_examples(self, minimum, maximum, expected_min, expected_max): 
     assert minimum == expected_min 
     assert maximum == expected_max 

    @pytest.mark.parametrize(
     "minimum, maximum, expected_min, expected_max", [ 
      (13, 15, 34, 45), 
      ("sd", 3, 34, 45), 
     ]) 
    def test_invalid_examples(self, minimum, maximum, expected_min, expected_max): 
     with pytest.raises(AssertionError): 
      assert minimum == expected_min 
      assert maximum == expected_max 


if __name__ == '__main__': 
    pytest.main(args=[__file__]) 

출력

============================= test session starts ============================= 
platform win32 -- Python 3.5.2, pytest-3.0.1, py-1.4.31, pluggy-0.3.1 
rootdir: C:\Users\<<user>>\.PyCharmCE2016.3\config\scratches, inifile: 
collected 3 items 

scratch_3.py ... 

========================== 3 passed in 0.02 seconds =========================== 
+0

네, 고마워요! (upvoted) – George

4

코드의 의도 된 동작 인 경우 최상의 동작 과정은 의도 한 동작을 반영하도록 테스트를 편집하는 것입니다. 테스트 사례는 단순히 관리자/고객/동료/기타를 보여줄 수있는 보고서를 작성하는 데 사용되는 것이 아니라 문서 형식이기도합니다. 테스트 케이스는 코드의 예상되는 동작을 사람들에게 보여주기 때문에 테스트를 보는 사람은 코드가 거기에 표시된 모든 입력을 받아 들일 것으로 가정합니다.

첫 번째 입력과 세 번째 입력이 잘못된 경우 다른 테스트 케이스를 만들어야합니다.이 테스트 케이스는 코드에서 불법 입력을 처리하는 방법을 테스트합니다.

+0

네가 맞아. 고마워! (upvoted) – George

관련 문제