在下面的代码中,我使用Moq
编写示例测试。我已经创建了一个模拟对象,并且正在使用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;
}
}
答案 0 :(得分:1)
要进行获取操作,SetupProperty
将创建两个设置:一个用于getter,一个用于setter。由于您只读取属性,因此该设置器的属性不匹配,因此会出现错误。
为避免这种情况,请使用mock.SetupGet(m => m.Property).Returns(() => value)
仅为吸气剂创建设置。
顺便说一句:SetupProperty
实际上具有与您可能想到的目的不同的目的:不应将其用于设定期望;取而代之的是,它用于“存根”属性,以使其保留设置为last的值。 Verify[All]
甚至在其检查中包括此类存根属性的事实可能是一个错误(已在SetupAllProperties
中得到修复)。
答案 1 :(得分:0)
如果我理解正确,则尝试设置属性期望值。
尝试关注而不是_sharedService.SetupProperty(m => m.RequestData, requestData);
:
_sharedService.Setup(foo => foo.RequestData).Returns(requestData);
中阅读更多信息。