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

问题描述 投票:1回答:1

我正在使用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);
}
unit-testing nunit justmock
1个回答
0
投票

为什么不直接断言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方法。

© www.soinside.com 2019 - 2024. All rights reserved.