在一个模拟的类中设置了一个属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在一个模拟的类中设置了一个属性相关的知识,希望对你有一定的参考价值。
我正在使用MockingContainer<T>
自动设置我的依赖项。如何声明其中一个依赖项的属性设置?
[SetUp]
public void SetUp()
{
//arrange
_baseUrl = "http://baseUrl";
_container = new MockingContainer<ApiInteractionService>();
_container.Arrange<IConfigService>(m => m.BaseUrl).Returns(_baseUrl);
_uut = _container.Instance;
}
下面的0调用失败,这是有道理的,因为我相信它正在看Getter,而不是Setter。那么如何断言被测单元调用了Setter?
[Test]
public void BaseUrlSet()
{
//act
var _ = _uut.MakeRequest((InitialRequest) Arg.AnyObject);
//assert
_container.Assert<IRestService>(m => m.BaseUrl, Occurs.Once());
}
根据文档(位于JustMock Docs,对于任何不熟悉但希望尝试协助的人)看来我应该使用Mock.ArrangeSet(lambda)
,但我似乎无法弄清楚如何使该语法与MockingContainer<T>
相关。
如果情况变得更糟,我可以不使用MockingContainer<T>
,但我宁愿不必重构我的测试套件只是为了适应一个特定的单元测试。
并不是说它与这个问题真的相关,但是在任何人都需要它的情况下,这里有一个ApiInteractionService
的存根
public ApiInteractionService(IRestService restService, IConfigService configService)
{
_restService = restService;
_restService.BaseUrl = configService.BaseUrl;
}
public string MakeRequest(InitialRequest initialRequest)
{
return _restService.Post(initialRequest);
}
为什么不直接断言BaseUrl
在测试结束时具有正确的值?
var baseUrl = _container.Get<IRestService>().BaseUrl;
Assert.AreEqual(baseUrl, _baseUrl);
正如评论中所建议的那样,_container.Assert<IRestService>(m => m.BaseUrl == _baseUrl)
将无效。 MockingContainer<T>.Assert
声称期望,它不仅仅像常规断言一样断言真相。正确的语法是:
_container.AssertSet<IRestService>(restService => restService.BaseUrl = _baseUrl, Occurs.Once());
但奇怪的是,容器上没有AssertSet方法。
以上是关于在一个模拟的类中设置了一个属性的主要内容,如果未能解决你的问题,请参考以下文章
为啥css中设置了margin-top属性后,运行时背景图片会下移,如何更改?
如何让片段中的多个视图调用片段类中声明的相同 onClick 函数?
如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?