JSON을 반환하는 코드에 단위 테스트를 작성했습니다. 그것이 반환하는 유형은 익명 유형이므로 그 값을 확인하고 객체를 어서 dynamic
내 어설 션을 수행 한다고 생각했습니다 .
그러나 그렇게하면 빌드가 실패하지만 오류 메시지가 없습니다. 새로운 단위 테스트 프로젝트에서 매우 간단한 코드로 이것을 재현 할 수있었습니다.
[TestMethod]
public void TestMethod1()
{
var obj = new { someValue = true };
dynamic asDynamic = obj;
Assert.IsTrue(asDynamic.someValue);
}
빌드 실패의 스크린 샷은 아래를 참조하십시오.
그래도 어설 션을 주석 처리하면 빌드가 성공합니다.
대조적으로, 나는 Rosq 컴파일러를 사용하는 LinqPad 5 베타에서 다음 코드를 실행했으며 아무런 문제가 없었습니다.
var obj = new { someValue = true };
dynamic asDynamic = obj;
Console.WriteLine((asDynamic.someValue == true).ToString());
진실
무슨 일이야? 오류가 표시되지 않으므로 dynamic
잘못 사용하고 있는지 또는 과부하로 IsTrue()
인해 사용할 과부하를 찾을 수 없는지 알 수 없습니다dynamic
있는지 또는 컴파일러의 버그 (이것은 의심합니다) , 내 코드에 문제가 있다는 증거는 없습니다).
과부하 문제와 관련하여 시도 Assert.IsTrue((bool)asDynamic.someValue);
했지만 빌드가 여전히 실패하지만 여전히 오류 메시지가 없습니다.
@ RonBeyer의 의견에 따라, 나는 또한 다음과 같은 캐스팅을 시도했지만 아무 소용이 없었습니다.
dynamic asDynamic = (dynamic)obj;
Assert.IsTrue(((dynamic)asDynamic).someValue);
Assert.IsTrue((bool)asDynamic.somevalue);
면밀한 조사 결과, 출력 창에 오류가있는 것으로 나타났습니다.
c : ... \ DynamicBuildFailTest \ UnitTest1.cs (16,33,16,42) : 오류 CS0656 : 누락 된 컴파일러 필수 멤버 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
좋아, VS2013은 오류를보고하는 데 더 좋습니다. 나는 그 오류를 기반으로 검색 할 것입니다.
좋아, Microsoft.CSharp에 대한 참조를 추가하면 빌드 오류가 수정 되었지만 VS2015의 문제 (아마도 내 마음에)가 해결되어야하기 때문에이 질문을 열어 두겠습니다.
dynamic asDynamic = (dynamic)obj;
? 또는 어설 션에서 동적을 주석 처리하고을 쓰십시오 Assert.IsTrue(((dynamic)obj).someValue);
.
Assert.IsTrue((bool)asDynamic.someValue);
?