문제

휴가시간이 제대로 누적되고 있는지 확인하기 위한 단위 테스트가 필요합니다.하지만 업무 규칙에 따라 휴가 시간이 누적되며, 규칙이 변경되면 단위 테스트가 중단됩니다.

이것이 허용됩니까?단위 테스트가 너무 취약하지 않은지 확인하기 위해 메서드를 통해 규칙을 노출한 다음 내 코드와 테스트 모두에서 해당 메서드를 호출해야 합니까?

내 질문은 다음과 같습니다변경될 수 있는 비즈니스 규칙을 단위 테스트하는 올바른 방법은 무엇입니까?

도움이 되었습니까?

해결책

테스트는 코드가 비즈니스 규칙을 올바르게 순종하도록해야합니다. 따라서 비즈니스 규칙을 둘러싼 테스트를 작성하거나 비즈니스 규칙 코드 자체에 의존하지 않습니다. 오히려 비즈니스 규칙이 변경되면 먼저 새로운 비즈니스 규칙을 반영하도록 테스트를 변경 한 다음 코드가 더 이상 테스트를 통과하지 않으면 테스트를 통과하도록 코드를 수정합니다.

당신이 일어나고 싶지 않은 것은 동일한 비즈니스 규칙이 적용되는 방식을 변경할 때 테스트가 중단되도록 테스트를 작성하는 것입니다. 이는 말보다 쉽지만, 본질적으로 테스트하려는 것은 코드가 구현되는 방식을 너무 좁게 지시하지 않고 규칙을 구현하는 데 필요한 최소입니다. 그러나 규칙의 결과가 다르면 먼저 테스트를 변경하고 코드를 일치시켜야합니다.

또한 테스트가 특정 데이터에 결합되기를 원하지 않습니다. 세금 계산을 할 때 테스트중인 클래스가 세금으로 5%를 사용한다고 가정하기 위해 시험을 작성해서는 안됩니다. 대신, 세금 비율을 공급하도록 시험을 작성한 다음 계산이 올바르게 수행되었는지 확인해야합니다. 아마도 범위를 벗어난 값도 잡히는지 확인하기 위해 테스트 할 다양한 값이있을 것입니다. 이의 결과 중 하나는 더 나은 디자인을 가질 수 있다는 것입니다. 이는 하드 코딩 된 값을 피하고 생산 코드를 데이터 변경에보다 유연하게 만드는 데 도움이 될 것입니다.

다른 팁

비슷한 설정이 있지만 비즈니스 규칙은 컴파일되었지만 구성 가능한 옵션이 있습니다 (귀하는 다를 수 있음). 비즈니스 규칙이 작동하는 핵심 방식을 변경하면 장치 테스트가 중단됩니다. 이것은 실제로 예상됩니다. 이는 시스템 전체에서 예상치 못한 잔물결을 분리하고 변경 사항에 맞게 테스트를 업데이트 할 수 있음을 의미합니다.

규칙이 외부 인 경우 (어떤 종류의 스크립트 언어 또는 데이터베이스 스프로) 인 경우 통합 테스트로 마무리하고 자동 실행을 위해 통합 테스트를 연결해야합니다. 더 이상 단위 테스트는 아니지만 통합 테스트도 상당히 중요하며 비즈니스 규칙 변경으로 인해 예기치 않은 잔물결을 방지하기 위해 단위 테스트와 같은 방식으로 도움이됩니다.

비즈니스 규칙이있는 것처럼 들리고 해당 비즈니스 규칙의 고객이 있습니다. 그 두 가지가 독립적으로 다를 수 있다면, 그에 따라 API를 설계하는 것이 좋습니다.

제시된 바와 같이, 귀하의 질문은 전략 패턴을 적절히 사용하여 해결할 수있는 것처럼 들립니다. 이 전략은 비즈니스 규칙을 나타내므로 고객에 대해 걱정하지 않고 순수한 맥락에서 테스트 할 수 있습니다.

비즈니스 규칙이 변경되면 기존 전략을 그대로 두는 것이 더 합리적 일 수 있으며 (나중에 다시 필요한 경우) 새로운 비즈니스 규칙을 나타내는 완전히 새로운 전략을 작성하고 (및 단위 테스트) 작성하는 것이 더 합리적 일 수 있습니다.

새로운 전략으로 완전히 완료되면 고객의 전략을 대체 할 수 있습니다.

클라이언트를 테스트 할 때는 클라이언트가 특정 전략 구현에 의존하지 않고 전략과 올바르게 상호 작용하는지 확인하기 위해 테스트 이중 전략 (모의 또는 스텁과 같은)에 대해이를 수행해야합니다.

이런 식으로, 당신은 깨끗한 우려를 분리하고 단위 테스트를 유지할 수있게합니다. 당신은 또한 개방/폐쇄 원칙에 순종합니다.

규칙이 변경되면 테스트가 실패한다는 말이 맞는 것 같습니다. 이는 예상되는 현상입니다.

테스트 자체에 하드코딩된 값 대신 데이터 고정물을 사용하면 나중에 테스트를 더 쉽게 유지 관리할 수 있습니다.예를 들어, 메소드가 foo를 반환해야 하는 경우 이를 고정 장치에 포함할 수 있습니다.비즈니스 로직을 변경할 때 픽스쳐만 변경하면 되며 단위 테스트 자체를 거칠 필요가 없습니다.

물론 이는 테스트 중인 논리 유형에 따라 크게 달라지며 항상 적용 가능한 것은 아닙니다.

나는 그것이 잘못된 질문 비즈니스 규칙이라고 생각하고 단위 테스트는 다른 추상화 수준에 있다고 생각합니다. 비즈니스 규칙은 최상위 추상화 (비즈니스 모델링)에 있지만 단위 테스트는 추상화 수준이 가장 낮은 코드 단위를 테스트하는 것입니다. 단위 테스트를 사용하여 비즈니스 규칙을 검증하거나 확인할 수 없습니다.또한 분석 및 설계 후 비즈니스 규칙은 여러 코드 단위에 영향을 줄 수 있습니다. 단위 테스트를 사용하여 비즈니스 규칙을 검증하거나 확인할 수 없습니다.. 테스트 케이스 또는 BDD 시나리오를 사용하여 비즈니스 규칙을 검증하고 확인할 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top