반응형
Moq Callback () 호출에서 변수 값 설정
Moq 콜백 메서드의 구문에 대해 약간 혼란 스러울 수 있다고 생각합니다. 다음과 같이 시도 할 때 :
IFilter filter = new Filter();
List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() };
IQueryable myFilteredFoos = null;
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects))
.Returns(myFilteredFoos.Cast<IFooBar>());
호출 myFilteredFoos
중에 null 이므로 예외 가 발생합니다 Cast<IFooBar>()
. 예상대로 작동하지 않습니까? 나는 FilterCollection
호출 될 것이라고 생각 하고 myFilteredFoos
null이 아니고 캐스트를 허용합니다.
FilterCollection
호출되지 않는 결론에 나를 이끄는 null을 반환 할 수 없습니다. 또한 myFilteredFoos
다음과 같이 선언 할 때 :
Queryable myFilteredFoos;
Return 호출은 myFilteredFoos가 초기화되기 전에 사용될 수 있다고 불평합니다.
이는 Returns
메서드 의 코드 가 즉시 평가 되기 때문입니다 . 즉, Setup
메서드가 호출 될 때입니다.
그러나 콜백은 GetByFilter
메서드가 호출 될 때까지 호출되지 않습니다 .
운 좋게도 Returns
메서드는 오버로드되어 실행을 연기 할 수도 있습니다.
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Callback((IFilter filter) =>
myFilteredFoos = filter.FilterCollection(objects))
.Returns(() => myFilteredFoos.Cast<IFooBar>());
그러나 Returns
메서드 에서 직접 매개 변수 값을 가져올 수 있으므로 콜백에 값을 저장할 필요가 없습니다 .
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Returns((IFilter filter) =>
filter.FilterCollection(objects).Cast<IFooBar>());
반환 값에서 매개 변수를 사용할 수 있습니다.
mockObject
.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Returns((IFilter filter) =>
{
myFilteredFoos = filter.FilterCollection(objects);
return myFilteredFoos.Cast<IFooBar>();
});
참고 URL : https://stackoverflow.com/questions/2494930/settings-variable-values-in-a-moq-callback-call
반응형
'developer tip' 카테고리의 다른 글
이 Subversion MKCOL 오류를 어떻게 수정합니까? (0) | 2020.12.08 |
---|---|
validates_uniqueness_of는 nil 또는 공백 (allow_nil 및 allow_blank 제외)에 전달합니다. (0) | 2020.12.08 |
최종 64 비트 컴파일러를 위해 32 비트 Delphi 프로그램을 어떻게 준비해야합니까? (0) | 2020.12.08 |
Ruby에서“잘못된 인수 개수 (0은 1)”가 무엇을 의미합니까? (0) | 2020.12.08 |
Firebase 연결이 끊어 지거나 회복되었는지 감지 (0) | 2020.12.08 |