제네릭 기본 유형의 메서드를 호출하면 내 단위 테스트에서 매우 이상한 일을합니다. 나는 NUnit과 MSTest를 같은 결과로 시도했다. 다음은 코드가 구성되는 방식입니다.IEnumerable 및 yield yield
public class MyStub {}
public class EnumerableGenerator
{
public bool GotMyStubs;
public IEnumerable<MyStub> GetMyStubs()
{
GotMyStubs = true;
yield return new MyStub();
}
}
public class ConsoleRunner
{
public void Main(string args[])
{
EnumerableGenerator gen = new EnumerableGenerator();
gen.GotMyStubs = false;
var myStubs = gen.GetMyStubs();
if (!gen.GotMyStubs)
return 1;
}
}
테스트가 명백하게 실패합니다. 이상한 부분은 코드를 통합 테스트 할 때 코드가 잘 작동한다는 것입니다. 그것은 단원 테스트에서 휴식. GetMyStubs에 전혀 참여할 수 없습니다. 메서드 내의 중단 점도 중단되지 않습니다. 나는 CLR에 의해 던져지는 모든 예외에 대한 위반을 켰다. 그리고 이것은 아무것도 얻지 않는다.
내가 GetMyStubs에 의해 반환 유형을 검사하고 유형의 전체 이름은 다음과 같습니다[MyNamespace.EnumerableGenerator2 + <GetMyStubs>
d__8 [[MyNamespace.MyStub, MyNamespace에, 버전 = 7.1.0.0, 문화 = 중립, PublicKeyToken = null]]
이제 (MSTest를 통해) 코드 커버리지 번호를 살펴보면 EnumerableGenerator.d__8 항목이 있음을 알 수 있습니다.
이런 사람이 있습니까? 나는 완전히 잃어 버렸어 ....
실제 문제를 설명하기 위해 코드 예제를 단순화하고 더 가깝게 일치하도록 이름을 변경했습니다. –
맞습니다. 왜 그것이 실패하고 있는지 확실히 설명합니다. –
나는 이것을 아주 자주 얻는다. 여기에 내 기사가 있습니다 : http://blogs.msdn.com/ericlippert/archive/2007/09/05/psychic-debugging-part-one.aspx 및 HTTP : //blogs.msdn .com/ericlippert/archive/2007/09/06/psychic-debugging-part-two.aspx –