Moq.MockException:以下模拟设置不匹配
Moq.MockException: The following setups on mock were not matched
在下面的代码中,我使用 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;
}
}
如果我没理解错的话,你试着设定属性期望值。
尝试以下而不是 _sharedService.SetupProperty(m => m.RequestData, requestData);
:
_sharedService.Setup(foo => foo.RequestData).Returns(requestData);
您可以在 Moq documentation
中阅读更多信息
对于 get-set 人,SetupProperty
将创建两种设置:一种用于 getter,另一种用于 setter。由于您只阅读 属性,因此 属性 与 setter 不匹配,因此出现错误。
为避免这种情况,请使用 mock.SetupGet(m => m.Property).Returns(() => value)
仅为 getter 创建设置。
顺便说一句:SetupProperty
实际上有一个与您想象的不同的目的:它不应该被用来建立期望;相反,它被用来 "stub" a 属性 这样它就保留了最后设置的值。 Verify[All]
甚至在其检查中包含此类存根属性的事实可能是一个错误(已在 SetupAllProperties
中修复)。
在下面的代码中,我使用 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;
}
}
如果我没理解错的话,你试着设定属性期望值。
尝试以下而不是 _sharedService.SetupProperty(m => m.RequestData, requestData);
:
_sharedService.Setup(foo => foo.RequestData).Returns(requestData);
您可以在 Moq documentation
中阅读更多信息对于 get-set 人,SetupProperty
将创建两种设置:一种用于 getter,另一种用于 setter。由于您只阅读 属性,因此 属性 与 setter 不匹配,因此出现错误。
为避免这种情况,请使用 mock.SetupGet(m => m.Property).Returns(() => value)
仅为 getter 创建设置。
顺便说一句:SetupProperty
实际上有一个与您想象的不同的目的:它不应该被用来建立期望;相反,它被用来 "stub" a 属性 这样它就保留了最后设置的值。 Verify[All]
甚至在其检查中包含此类存根属性的事实可能是一个错误(已在 SetupAllProperties
中修复)。