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 DocsMock.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);
}
4

1 回答 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 方法。

于 2019-02-13T10:44:51.137 回答