홈>
아래 코드에서
Moq
를 사용하고 있습니다.
샘플 테스트를 작성합니다. Mock Object를 만들었고
SetupProperty
를 사용하고 있습니다.
속성에 대해 가짜 값이 반환되도록 설정합니다. 하지만
_sharedService.VerifyAll()
줄에서 오류가 발생합니다.
.
사소한 것이 빠졌지 만 정확히 무엇인지 확실하지 않습니다. 누구든지 도와 주시겠습니까?
[TestFixture]
public class ObjectFactoryTests : TestFixtureBase
{
private Mock<ISharedService> _sharedService;
[SetUp]
public void SetUp()
{
_sharedService = new Mock<ISharedService>(MockBehavior.Strict);
}
protected override void VerifyAll()
{
_sharedService.VerifyAll();
}
private IObjectFactory GetObjectFactory()
{
return new ObjectFactory(sharedService.Object);
}
[Test]
public void ObjectFactory_GenerateObject_Request_Success()
{
MyObject1 request = something;
var requestData = new Dictionary<string, object>();
requestData.TryAdd(Cache.Client, Constants.CLIENT);
_sharedService.SetupProperty(m => m.RequestData, requestData);
var factory = GetObjectFactory();
var actual = factory.GenerateObject(request);
Assert.That(actual.Client, Is.EqualTo(requestData[Cache.Client].ToString()), Constants.CLIENT);
VerifyAll();
}
}
public class ObjectFactory : IObjectFactory
{
ISharedService SharedService = something;
public MyObject GenerateObject(MyObject1 request)
{
MyObject obj = new MyObject(request);
obj.Client = SharedService.RequestData[Cache.Client].ToString();
return obj;
}
}
- 답변 # 1
- 답변 # 2
getter와 setter에 대한 두 가지 설정을 만듭니다. 속성 만 읽는 중이므로 setter의 속성이 일치하지 않으므로 오류가 발생합니다.
이를 피하려면SetupProperty
를 사용하십시오. 게터에 대한 설정 만 만들 수 있습니다.Btw .:
mock.SetupGet(m => m.Property).Returns(() => value)
실제로 당신이 생각하는 것과 다른 목적을 가지고 있습니다 : 그것은 기대를 설정하는데 사용되어서는 안됩니다;대신 속성을 "스텁"하여 마지막으로 설정된 값을 유지하는 데 사용됩니다. 그SetupProperty
사실 검사에 이러한 스텁 된 속성을 포함하더라도 오류 일 수 있습니다 (Verify[All]
에서 이미 수정되었습니다) ).SetupAllProperties
정확하게 이해하면 속성 기대치를 설정하려고합니다.
_sharedService.SetupProperty(m => m.RequestData, requestData);
대신 다음을 시도하십시오 :Moq 문서에서 더 많은 정보를 읽을 수 있습니다