문제

단위 테스트 프로젝트에서 실행되는 코드를 디버깅하려고 하는데 메서드를 한 단계씩 실행하려고 하면 바로 다음 줄로 넘어가고 해당 메서드 내부의 중단점이 적중되지 않습니다.메서드는 다른 프로젝트에 있는 클래스에 있지만 모든 코드는 디버그 모드로 빌드되었으며 기쁨 없이 솔루션을 정리하고 다시 빌드해 보았습니다.

그러나 이는 메서드에 반복자 블록을 추가한 이후에만 발생했습니다.제거하고 다시 조립하면 잘 들어갈 수 있어요.기이한?

Visual Studio 2010 Beta 1을 사용하고 있습니다. 이것이 단지 버그일까요?

도움이 되었습니까?

해결책

반복자 블록은 지연된 실행을 사용합니다. 즉, 다음을 의미합니다.실제로 데이터 반복을 시작할 때까지는 아무 것도 실행되지 않습니다.

그래서:데이터가 반복되었나요?값을 반복하는 것이 있습니까?가능한 한 빨리 실행되는 유효성 검사 논리를 추가해야 하는 경우 현재 다음 두 가지 방법이 필요합니다.

public static IEnumerable<int> GetNumbers(int from, int to) {
    // this validation runs ASAP (not deferred)
    if (to < from) throw new ArgumentOutOfRangeException("to");
    return GetNumbersCore(from, to);
}
private static IEnumerable<int> GetNumbersCore(int from, int to) {
    // this is all deferred
    while (from <= to) {
        yield return from++;
    }
}

다른 팁

마크가 맞습니다.메서드는 실행이 지연되며 반복자가 실제로 실행될 때까지 메서드를 한 단계씩 실행할 수 없습니다.

단위 테스트에서 반복기 블록을 디버깅해야 할 때 다음을 수행합니다.메서드가 GetStuff라고 가정합니다.

[TestMethod]
public void TestGetStuff() {
  var obj = GetStuffObje();
  var list = obj.GetStuff().ToList();
}

.ToList() 호출은 반복자가 강제로 실행을 완료하도록 합니다.그런 다음 GetStuff 메서드 내에 중단점을 설정하고 디버깅 세션을 시작합니다.

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