수색…


통사론

  • unittest {...} - "unittesting"모드에서만 실행되는 블록
  • assert (<부울 값으로 평가되는 표현식>, <선택적 오류 메시지>)

단위 테스트 블록

테스트는 안정적인 버그없는 응용 프로그램을 보장하는 훌륭한 방법입니다. 대화 형 문서로 사용되며 기능을 중단하기 위해 두려움없이 코드를 수정할 수 있습니다. D는 D 언어의 일부로 unittest 블록에 대한 편리하고 고유 한 구문을 제공합니다. D 모듈의 어느 곳에서도 unittest 블록을 사용하여 소스 코드의 기능을 테스트 할 수 있습니다.

/**
Yields the sign of a number.
Params:
    n = number which should be used to check the sign
Returns:
    1 for positive n, -1 for negative and 0 for 0.
*/
T sgn(T)(T n)
{
    if (n == 0)
        return 0;
    return (n > 0) ? 1 : -1;
}

// this block will only be executed with -unittest
// it will be removed from the executable otherwise
unittest
{
    // go ahead and make assumptions about your function
    assert(sgn(10)  ==  1);
    assert(sgn(1)   ==  1);
    assert(sgn(-1)  == -1);
    assert(sgn(-10) == -1);
}

unittest 실행

-unittest 플래그가 D 컴파일러에 전달되면 모든 unittest 블록이 실행됩니다. 종종 컴파일러가 스텁 된 main 기능을 생성하게하는 것이 유용합니다. 컴파일 및 실행 래퍼 rdmd 사용하면 D 프로그램을 테스트하는 것이 쉽습니다.

rdmd -main -unittest yourcode.d

물론 원하는 경우이 프로세스를 두 단계로 나눌 수도 있습니다.

dmd -main -unittest yourcode.d
./yourcode

dub 프로젝트의 경우 모든 파일을 컴파일하고 unittest 블록을 실행하는 것이 편리합니다.

dub test

프로 팁 : 티핑을 저장하기 위해 쉘 별명으로`tdmd`를 정의하십시오.
alias tdmd="rdmd -main -unittest"

다음을 사용하여 파일을 테스트하십시오.

tdmd yourcode.d

주석이 첨부 된 단위 테스트

템플릿으로 @nogc 코드의 경우 함수 속성 (예 : @nogc 가 올바르게 추론되었는지 확인하는 것이 유용합니다. 특정 테스트를 위해이를 확인하여 전체 unittest에 주석을 달 수 있음)

@safe @nogc pure nothrow unittest
{
    import std.math;
    assert(exp(0)  ==  1);
    assert(log(1)  ==  0);
}

물론 D에서 모든 블록은 속성으로 주석을 달 수 있으며 컴파일러는 해당 블록이 올바른지 확인합니다. 예를 들어, 다음은 위의 예제와 유사합니다.

unittest
{
    import std.math;
    @safe {
        assert(exp(0)  ==  1);
        assert(log(1)  ==  0);
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow