조롱이 왜 이런 식으로 행동하는지 이해하려고합니다. (Moq과 함께 NUnit을 사용하고 있습니다.) 우리는 간단한 클래스가,의가 있다고 가정 해 봅시다 :다른 생성자를 사용하여 객체 조롱
public class Package
{
public virtual int PackageId { get; set; }
public Package()
:this(-1)
{
}
public Package(int packageId)
{
PackageId = packageId;
}
}
그리고 몇 가지 간단한 테스트를 논의하기 :
[TestFixture]
public class NUnitTrickyTest
{
private const int SamplePackageId = 10;
[Test]
public void TestPackageSetUp_WhenMockedWithDefaultConstructor_ExpectSamplePackageIdSet()
{
var samplePackage = new Mock<Package>();
samplePackage.SetupProperty(x => x.PackageId, SamplePackageId);
Assert.AreEqual(SamplePackageId, samplePackage.Object.PackageId);
}
[Test]
public void TestPackageSetUp_WhenMockedWithParametrizedConstructor_ExpectSamplePackageIdSet()
{
var samplePackage = new Mock<Package>(SamplePackageId);
// samplePackage.SetupProperty(x => x.PackageId, SamplePackageId);
Assert.AreEqual(SamplePackageId, samplePackage.Object.PackageId);
}
}
첫 번째 테스트가 samplePackage.Object.PackageId
-1을 반환, 예상대로되지 10로 실패합니다. Package()
은 기본 -1로 속성을 초기화하는 매개 변수화 된 생성자를 호출합니다. 두 번째 테스트에서 samplePackage.Object.PackageId
은 0을 반환합니다.
왜 0이 반환되었는지 (디버그에서 나는 생성자에서 10이 전달되지만 속성은 0 값인 것으로 나타났습니다) 이유를 이해하지 못합니다. 두 번째 테스트 : 두 번째 테스트에서이 명령의 주석을 해제하면 samplePackage.SetupProperty(x => x.PackageId, SamplePackageId)
이 성공합니다. 그런데 왜 SetupProperty
이 그 경우 (속성은 10을 반환합니다) 예상 한대로 동작하고 첫 번째 테스트에서 그런 식으로 작동하지 않는 이유는 무엇입니까?
도와 주시겠습니까? 이것은 내 첫 게시물이므로 심각하지는 마십시오 :)
을 사용해야합니다. CallBase 설정에 대한 참고 사항 –
감사합니다. 그러나 첫번째 것은 실패합니다. PackageId는 생성자에 의해 -1로 초기화되고 .SetupProperty는 조롱 된 객체에 대해 'override'하지 않습니다. – Artem
조금 더 깊이 생각하고 대답을 업데이트했습니다. 나는 진실로 검증하기 위해 소스 코드에 가야 할 것이지만, 나는 확실히 나의 대답을 확신하고있다. –