【问题标题】:Asserting a property has been set in a mocked class断言属性已在模拟类中设置
【发布时间】:2018-12-31 21:00:40
【问题描述】:

我正在使用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&lt;T&gt; 相关。

如果情况变得更糟,我不能使用MockingContainer&lt;T&gt;,但我宁愿不必为了适应一个特定的单元测试而重构我的测试套件。


并不是说它与问题真正相关,但如果有人需要它,这里是 ApiInteractionService 的存根

public ApiInteractionService(IRestService restService, IConfigService configService)
{
    _restService = restService;
    _restService.BaseUrl = configService.BaseUrl;
}

public string MakeRequest(InitialRequest initialRequest)
{
    return _restService.Post(initialRequest);
}

【问题讨论】:

  • 为什么不_container.Assert&lt;IRestService&gt;(m =&gt; m.BaseUrl == _baseUrl);
  • @Fabio 那不是有效代码 Telerik.JustMock.Core.MockException: 'The expression does not represent a method call, property access, new expression or a delegate invocation.' 不过好主意。

标签: unit-testing nunit justmock


【解决方案1】:

为什么不简单地断言BaseUrl 在测试结束时具有正确的值?

var baseUrl = _container.Get<IRestService>().BaseUrl;
Assert.AreEqual(baseUrl, _baseUrl);

正如 cmets 中所建议的,_container.Assert&lt;IRestService&gt;(m =&gt; m.BaseUrl == _baseUrl) 将不起作用。 MockingContainer&lt;T&gt;.Assert 断言一个期望,它不仅仅是像常规断言那样断言真理。正确的语法应该是:

_container.AssertSet<IRestService>(restService => restService.BaseUrl = _baseUrl, Occurs.Once());

但奇怪的是,容器上没有 AssertSet 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多