개체 매개 변수로 Moq 확인
클래스 인 매개 변수를 확인하려고합니다. 테스트중인 코드는 괜찮습니다. 버그가 테스트 중입니다.
나는 두 가지 방법을 시도했지만 둘 다 실패했습니다.
내 시도는 다음과 같습니다.
1:
this.MockImageResizeFilter.Verify(m => m.Filter(this.UploadedFileData, new ImageFilterOptions()
{
Width = 256,
Height = 256,
}));
두 번째 매개 변수로 전달 된 객체의 속성이 동일하더라도 항상 실패합니다. 첫 번째 매개 변수는 정상적으로 확인됩니다.
2 :
this.MockImageResizeFilter.Setup(m => m.Filter(It.IsAny<byte[]>(), It.IsAny<ImageFilterOptions>()))
.Callback<byte[], ImageFilterOptions>((data, options) =>
{
Assert.AreEqual(this.UploadedFileData, data, "data");
Assert.AreEqual(filterOptions.Width, options.Width, "Width");
Assert.AreEqual(filterOptions.Height, options.Height, "Height");
}
);
이것은 실패해야 할 때에도 항상 통과합니다. 콜백의 Assert는 실패하지만 예외는 외부 컨텍스트로 전달되지 않으므로 테스트는 항상 통과합니다.
내가 뭘 잘못하고 있는지 찾도록 도와 줄 수 있나요?
첫 번째 시도는 달성하고자하는 것에 더 가깝습니다.
실패한 이유는 Moq (아마도)가 메서드가 호출 된 매개 변수 가 .NET 호출에서 제공 한 것과 동일한 인스턴스 Object.Equals
인지 테스트하기 위해 덮개를 사용 ImageFilterOptions
하기 때문 Verify
입니다.
에 있기 때문에 그들, 동일한 인스턴스 수하는 것은 불가능하다 Verify
당신이를 만듭니다 new ImageFilterOptions()
.
이 방법으로 매개 변수 검사를 수행하는 대신 Moq의 It.Is
구문을 사용 하여 매개 변수가 예상 한 것인지 확인하는 표현식을 제공 할 수 있습니다 .
귀하의 경우에는, 당신은 매개 변수 유형인지 확인하고자 ImageFilterOptions
하고 모두 있음 Width
과이 Height
설정됩니다 256
. 그렇게 할 수있는 표현은 다음과 같습니다.
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)
따라서에 대한 호출 Verify
은 다음과 같습니다.
this.MockImageResizeFilter.Verify(m => m.Filter(
this.UploadedFileData,
It.Is<ImageFilterOptions>(p => p.Width == 256 && p.Height == 256)));
참고 URL : https://stackoverflow.com/questions/13495801/moq-verify-with-object-parameter
'IT TIP' 카테고리의 다른 글
textNodes에 해당하는 getElementsByTagName () (0) | 2020.11.01 |
---|---|
node.js로 mongodb에 연결하고 인증하는 방법은 무엇입니까? (0) | 2020.11.01 |
전면 광고 AdMob 광고 : 'IllegalStateException : 전체 화면 활동 만 방향을 요청할 수 있습니다.' (0) | 2020.11.01 |
TFS 명령 shelve / unshelve에 해당하는 Git은 무엇입니까? (0) | 2020.11.01 |
여기서 @plt는 무엇을 의미합니까? (0) | 2020.11.01 |