在一个模拟的类中设置了一个属性

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 的智能感知?

Cookie中设置了"HttpOnly"属性,有效的防止XSS攻击

Genymotion - 在 etc/hosts 文件中设置了哪个 IP 以通过域访问主机的本地网络服务器?