왜 많은 수의 assertEquals()
또는 유사한 함수가 첫 번째 매개 변수로 예상 값을 취하고 실제 값을 두 번째 매개 변수로 사용합니까?
이것은 나에게 반 직관적 인 것처럼 보입니다. 그렇기 때문에이 비정상적인 주문에 대한 특별한 이유가 있습니까?assertEquals() 매개 변수가 순서 (예상, 실제)에있는 이유는 무엇입니까?
답변
작성자가 직감과 일치 할 확률이 50 %이기 때문에.
당신이 알고있는 일부 다른 오버로드
assertWhatever(explanation, expected, actual)
그리고 설명,의, 실제 반대로 당신이하지 않는, 알고있는 인 기대와 함께 이동하기 때문에 당신이 코드를 작성하는 시점을 안다.
그러나이 경우 대부분의 언어에서는 필수 매개 변수가 먼저 나타나고 필수 매개 변수는 마지막에 표시되기 때문에 약간 일치하지 않게됩니다. 이것이 내가 자연스럽게가는 이유입니다. assertWhatever (실제, 예상 [, 설명]) – jor
죄송합니다. _optional_이 (가) 필수 항목이 아닌 마지막으로 나타나는 것을 의미합니다 ... – jor
바로이 jor! 게다가 if ("a"== s)보다는 if (s == "a")를 쓰는 것이 더 일반적이다 (비록 그것이 더 좋은 방법이 될 수 있는지 논쟁의 여지가 있지만, 하나이기는하지만). – benroth
xUnit 테스트 규칙은 실제/예상됩니다. 그래서 많은 사람들에게 자연의 질서는 그들이 배운 것입니다. 흥미롭게도 xUnit의 프레임 워크 qunit에 대한 규칙에서 휴식의
예상/실제 간다. 적어도 자바 스크립트와 당신은 단지 이전을 캡슐화하는 새로운 함수를 작성하고 그것을 원래의 변수에 할당 할 수 있습니다 :
var qunitEquals = equals;
equals = function(expected, actual, message) {
qunitEquals(actual, expected, message);
};
나는 일관성 # 1이라는 합의에 동의를하지만, 비교 사전의 행동은있을 수 있습니다 이 질문을 평가하는 데 도움이되는 데이터 포인트. 내가 볼 때
는 "+"는 DIFF에, 내가 이것을 읽으면서 "절차가 테스트중인이 추가되었습니다." 다시, 개인 선호도가 적용됩니다.
참고 : I는 알파벳 순으로 키를 사용하고 사전이 더 이상 그렇게 만 중간 키가 예를의 명확성을 위해 변경됩니다했다. 다른 시나리오에서는 더 복잡한 diffs가 표시됩니다. 또한 주목할> = 2.7 assertEqual uses assertDictEqual 및> = 3.1
가 exl.py
from unittest import TestCase
class DictionaryTest(TestCase):
def test_assert_order(self):
self.assertEqual(
{
'a_first_key': 'value',
'key_number_2': 'value',
'z_last_key': 'value',
'first_not_second': 'value',
},
{
'a_first_key': 'value',
'key_number_2': 'value',
'z_last_key': 'value',
'second_not_first': 'value',
}
)
출력 : I 보통 실제 예 assertThat 같은 매처을 (사용하게 이유
$ python -m unittest exl
F
======================================================================
FAIL: test_assert_order (exl.DictionaryTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "exl.py", line 18, in test_assert_order
'second_not_first': 'value',
AssertionError: {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'first_ [truncated]... != {'a_first_key': 'value', 'z_last_key': 'value', 'key_number_2': 'value', 'second [truncated]...
{'a_first_key': 'value',
- 'first_not_second': 'value',
'key_number_2': 'value',
+ 'second_not_first': 'value',
'z_last_key': 'value'}
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
- 1. UdpClient.Receive에서 ref 매개 변수가 필요한 이유는 무엇입니까?
- 2. "out"매개 변수가 필요한 이유는 무엇입니까?
- 3. 매개 변수가
- 4. Curl 및 wget : GET 매개 변수가 사용되지 않는 이유는 무엇입니까?
- 5. EventHandlers 객체 매개 변수가 객체 유형일 뿐인 이유는 무엇입니까?
- 6. where 절의 매개 변수가 리터럴 값보다 느린 이유는 무엇입니까?
- 7. JavaScript 함수의 매개 변수가 'undefined'를 반환하는 이유는 무엇입니까?
- 8. 매개 변수가 항상 setInterval()의 함수로 전송되지 않는 이유는 무엇입니까?
- 9. 스칼라 보조 생성자에 형식 매개 변수가 허용되지 않는 이유는 무엇입니까?
- 10. 이 기본 템플릿 매개 변수가 허용되지 않는 이유는 무엇입니까?
- 11. C# 스레드 실행 중 스레드 매개 변수가 변경됩니다 - 이유는 무엇입니까?
- 12. __setattr__에 대한 "name"매개 변수가 클래스를 포함하지만 __getattr__에없는 이유는 무엇입니까?
- 13. 이 변수가 변경되는 이유는 무엇입니까?
- 14. 변수가 NULL 인 이유는 무엇입니까?
- 15. 왜 'atan2`의 매개 변수가 "거꾸로"입니까?
- 16. 기본 템플릿 매개 변수가 생성자
- 17. 요청 매개 변수가 떨어짐
- 18. 변수가 Java에서 인터페이스 이름으로 선언되는 이유는 무엇입니까?
- 19. OOP의 기본 매개 변수가 좋지 않습니까?
- 20. 대리자의 선택적 매개 변수가 제대로 작동하지 않습니다.
- 21. 의 JUnit assertEquals
- 22. If 문을 사용하여 변수가 변경되는 이유는 무엇입니까?
- 23. 제어 매개 변수가 없습니다.
- 24. "매개 변수가 올바르지 않습니다"
- 25. 매개 변수가 유효하지 않습니다.
- 26. Win32Exception 매개 변수가 잘못되었습니다
- 27. 부모 URL 매개 변수가
- 28. 매개 변수가 제대로
- 29. 매개 변수가 클래스를 확장합니다.
- 30. OleDbCommand 매개 변수 순서 및 우선 순위
이것은, (예상)) 읽는 것이 훨씬 쉬워졌습니다. – JonathanC
정말 순서입니까? 문서는 https://docs.python.org/2/library/unittest.html#unittest.TestCase.assertEqual 자체의 assertEqual에 대한 표준을 나타내지 않으며 해당 페이지를 탐색 할 때 unittest 모듈 자체 내에서 순서가 일치하지 않는다는 것을 보여줍니다 . 그러나이 파이썬 문제는 (실제로, 예상 된) 실제 표준이라고 생각합니다. http://bugs.python.org/issue10573 –
또한 assertEquals는 더 이상 사용되지 않습니다 (적어도 assertEqual을 사용하십시오. 그들은에서 갔어요 같이 보인다 ': 2.7, 실제로 예상과 실제입니다) –