수익률 반환을 사용하는 프로젝트에서 MSTest가 전달되는 동안 XUnit이 단위 테스트에서 예외를 catch하지 못하는 이유를 이해할 수 없습니다.XUnit 및 MSTest와 ExpectedException이 다른 결과 반환
내 더미 코드입니다.
이상한 점은 개인 메서드 인 EnumerableYieldReturn을 사용하여 논리를 직접 공용 메서드 인 YieldReturnList에 넣으면 XUnit 테스트가 통과되고 MSTest가 실패하는 것입니다.
[TestClass]
public class MSTestRunner
{
[TestMethod]
[ExpectedException(typeof(ArgumentException))]
public void MSTestUsingExpectedException()
{
var sut = new YieldReturn();
sut.YieldReturnList(null);
}
}
public class XUnitRunner
{
[Fact]
[ExpectedException(typeof(ArgumentException))]
public void XUnitUsingExpectedException()
{
var sut = new YieldReturn();
sut.YieldReturnList(null);
}
}
public class YieldReturn
{
public IEnumerable<string> YieldReturnList(int? value)
{
if (value == null)
throw new ArgumentException();
return EnumerableYieldReturn((int)value);
}
private IEnumerable<string> EnumerableYieldReturn(int value)
{
var returnList = new List<string>() { "1", "2", "3" };
for (int i = 0; i < value; i++)
{
yield return returnList[i];
}
}
}
... 나는 sut.YieldReturnList의 반환 객체를 할당하고 그것을 통해 반복을 시도하여 전달하는 모두를 얻을 수 있지만, 하나의 프레임 워크를 통과하고, 다른 하나는 실패하는 이유는 설명하지 않습니다
+1. 마지막 문장의 결과는 두 부분으로''yield '하는 public 메소드를 깨는 것이 유용하다는 것입니다. 첫 번째 부분은 유효성 검사를하고 두 번째 호출은'yield'를 수행합니다. 그런 식으로 즉시 유효성 검사가 수행됩니다. –