[C#] Assert () 메소드의 기능은 무엇입니까? 여전히 유용합니까?

중단 점으로 디버깅하고 어설 션 호출을 알고 있습니까? 나는 그것이 단위 테스트만을위한 것이라고 생각했다. 중단 점 이상의 기능은 무엇입니까? 중단 점을 사용할 수 있으므로 Assert를 사용해야하는 이유는 무엇입니까?



답변

디버그 컴파일 Assert에서 부울 조건을 매개 변수로 사용하고 조건이 false 인 경우 오류 대화 상자를 표시합니다. 조건이 true이면 프로그램이 중단없이 진행됩니다.

Release에서 컴파일하면 모든가 Debug.Assert자동으로 제거됩니다.


답변

에서 코드 완성

8 방어 프로그래밍

8.2 주장

어설 션은 개발 중에 사용되는 코드 (일반적으로 루틴 또는 매크로)로 프로그램이 실행될 때 자체적으로 확인할 수 있습니다. 어설 션이 true이면 모든 것이 예상대로 작동한다는 의미입니다. False이면 코드에서 예기치 않은 오류가 감지되었음을 의미합니다. 예를 들어, 시스템에서 고객 정보 파일에 레코드가 50,000 개를 넘지 않는다고 가정하면 프로그램에 레코드 수가 50,000보다 작거나 같다는 주장이 프로그램에 포함될 수 있습니다. 레코드 수가 50,000보다 작거나 같은 한 어설 션은 자동입니다. 그러나 50,000 개가 넘는 레코드가 발생하면 프로그램에 오류가 있다고 크게 “어설트”합니다.

어설 션은 특히 크고 복잡한 프로그램과 안정성이 높은 프로그램에 유용합니다. 이를 통해 프로그래머는 불일치 한 인터페이스 가정, 코드 수정시 발생하는 오류 등을보다 신속하게 제거 할 수 있습니다.

어설 션은 일반적으로 두 가지 인수를 사용합니다. 참이라고 가정하는 가정을 설명하는 부울 식과 그렇지 않은 경우 표시 할 메시지입니다.

(…)

일반적으로 사용자는 프로덕션 코드에서 어설 션 메시지를 보지 않기를 원합니다. 어설 션은 주로 개발 및 유지 관리 중에 사용됩니다. 어설 션은 일반적으로 개발시 코드로 컴파일되고 프로덕션 코드에서 컴파일됩니다. 개발 중에 어설 션은 모순 된 가정, 예기치 않은 조건, 잘못된 값이 루틴에 전달되는 등을 제거합니다. 생산하는 동안 어설 션이 시스템 성능을 저하시키지 않도록 코드에서 컴파일됩니다.


답변

변수를 확인하기 위해 모든 작은 코드 줄을 중단하지 않으려는 경우에 사용해야하지만 특정 상황이있는 경우 일종의 피드백을 원합니다. 예를 들면 다음과 같습니다.

Debug.Assert(someObject != null, "someObject is null! this could totally be a bug!");


답변

Assert는 Microsoft의 UI 디자인 기술을 익힐 수있는 또 다른 기회를 제공합니다. 의미 : 중단, 다시 시도, 무시 및 세 개의 버튼이있는 대화 상자와 제목 표시 줄에서 해석하는 방법에 대한 설명!


답변

Assert를 사용하면 코드에 조건 (포스트 또는 프리)을 적용 할 수 있습니다. 의도를 문서화하고 의도가 충족되지 않으면 디버거가 대화 상자를 통해 알려주는 방법입니다.

중단 점과 달리 Assert는 코드와 함께 제공되며 의도에 대한 추가 정보를 추가하는 데 사용할 수 있습니다.


답변

Assert를 사용하면 테스트와 릴리스간에 별도의 메시징 동작을 제공 할 수 있습니다. 예를 들어

Debug.Assert(x > 2)

릴리스 빌드가 아닌 “디버그”빌드를 실행중인 경우에만 중단을 트리거합니다. 여기 에이 동작의 전체 예가 있습니다.


답변

첫째 Assert()방법은 사용할 수 있습니다 TraceDebug클래스.
Debug.Assert()디버그 모드에서만 실행 중입니다.
Trace.Assert()디버그 및 릴리스 모드에서 실행 중입니다.

예를 들면 다음과 같습니다.

        int i = 1 + 3;
        // Debug.Assert method in Debug mode fails, since i == 4
        Debug.Assert(i == 3);
        Debug.WriteLine(i == 3, "i is equal to 3");

        // Trace.Assert method in Release mode is not failing.
        Trace.Assert(i == 4);
        Trace.WriteLine(i == 4, "i is equla to 4");

        Console.WriteLine("Press a key to continue...");
        Console.ReadLine();

이 코드를 디버그 모드에서 실행 한 다음 릴리스 모드에서 실행하십시오.

여기에 이미지 설명을 입력하십시오

디버그 모드에서 코드 Debug.Assert문이 실패하면 응용 프로그램의 현재 스택 추적을 보여주는 메시지 상자가 나타납니다. Trace.Assert()조건이 true 이므로 해제 모드에서는 발생하지 않습니다 (i == 4).

WriteLine() method는 단순히 Visual Studio 출력에 정보를 기록하는 옵션을 제공합니다.
여기에 이미지 설명을 입력하십시오