테스트 방법?void 메서드를 테스트하는 방법은 조건이 만족하면 반환합니다
public void TestMethod()
{
if(aDenpendency.someMethod()) return;
// Followed by other logic....
}
다음 논리에 다른 종속성이 없으므로 AssertWasNotCalled를 사용할 수 없습니다.
미리 감사드립니다.
테스트 방법?void 메서드를 테스트하는 방법은 조건이 만족하면 반환합니다
public void TestMethod()
{
if(aDenpendency.someMethod()) return;
// Followed by other logic....
}
다음 논리에 다른 종속성이 없으므로 AssertWasNotCalled를 사용할 수 없습니다.
미리 감사드립니다.
설명하는대로 테스트하는 것은 실수입니다. 그리고 가난한 코드 구조를 나타냅니다 그리고 명확한 코드 냄새, 당신은 리 팩터와 단위 테스트 코드, 당신이 테스트를 목표로 그것을 감안할 때 그것은 다음과 같이 호출되지 않았 음을 나타냅니다 당신이 또한 호출되었을 때 테스트를 원한다.
하나의 책임을지기 위해서는 더 합리적인 단위 테스트가 필요합니다. 반환 후에 논리를 가져올 수 있으며 메서드 및 단위 테스트에서 그 결과를 테스트 할 수 있습니다.
유닛 테스트는 가짜/위조로 예상 설정을 테스트하거나 작동 결과를 테스트해야한다는 것을 테스트하지 않습니다.
메서드가 호출 된 후에 개체의 상태를 테스트하는 테스트를 작성할 수 있지만이 테스트는 단위 테스트가 아니라 통합 테스트입니다. 즉, return 문이 실행 된 후에 다른 코드가 실행되지 않아야하므로 상태를 테스트 할 수 있으므로 수정되거나 처리되지 않은 내용이 수정되지 않습니다.
예를 들어 테스트 할 때 아무 문제가 없습니다. 정렬 루틴은 스펙의 일부인 비교 함수를 올 Y 른 횟수만큼 호출합니다. 아니면'O (N^3)'행동을 감지하는 것이 좋을까요? –
Ben 나는 당신이 불려지지 않은 것을 시험해서는 안된다고 말하고 있습니다. 또한 메소드 밖의 상태 인 플러스 테스트는 A.A.A 유닛 테스트 스타일 (Arrange Act Assert) 외부에서는 더 이상 결과의 코드 단위를 테스트하지 않으므로 더 많은 통합 테스트입니다.그것이 내가 당신의 요점을 정확하게 이해하는 경우입니다. –
그리고 저는 뭔가 테스트가 잘못되었다고 말하고 있습니다. C#의 예제를 즉시 생각할 수는 없지만 C++에서는 큰 데이터 구조 인 경우 특정 함수가 인수의 복사본을 만들지 않는지 확인하고자 할 수 있습니다 (C++의 복사본은 비싼 경향이 있습니다). 깊은 사본). 아, 여기 있습니다 : C#에서는 캐시 된 결과를 기반으로 특정 메서드가 실행되는지 테스트하고 새 데이터베이스 쿼리를 발생시키지 않을 수 있습니다. –
테스트중인 메소드가 '실행 중 \ 처리 \ 중단됨'과 같은 '상태'속성을 설정하면 어떻게됩니까?
그래서 설정중인 테스트 상황에서 void 메소드를 호출 한 다음 나중에 속성을 확인하십시오. 반환; 상태 속성 설정은 코드에 함께 표시됩니다.
if(condition){
_status = 1; //Or use an enumeration would be better
return;
}
테스트에서는 공용 접근을 통해 상태를 테스트합니다.
모든 경우에 적절하지 않을 수 있지만 내 클래스에 Process() 메소드가있는 클래스를 찾고 있습니다. 모의가 필요하지 않은 상태에서 테스트가 더 간단해질 수 있습니다. (스텁이 여전히 필요할 수도 있습니다.) 이전에 포스터에 동의합니다. 가능하면 더 나은 접근법)
나는 이것이 테스트를 허용하기 위해 코드를 작성하는 것처럼 느낄 수도 있지만, 특정 경우에는 코드 실행 중에 클래스의 상태를 확인하기 위해 public 속성을 사용할 것이다. 접근 방식은 전반적인 설계와 일치합니다.
코드 예제에서 테스트 할 내용이 명확하지 않아서 전체 방법을 보여주고 자세한 정보를 제공하십시오. – sll
@sll 나는 그가 'return'이라고 주장 할 수있는 방법을 묻고 있다고 생각합니다. 끝나는 시점에 반환되는 메서드가 아니라 void 메서드의 특정 시점에서 호출되었습니다. – Robbie
@ Robbie : 감사합니다. – sll