声明属性已在模拟类中设置

时间:2018-12-31 21:00:41

标签: unit-testing nunit justmock

我正在使用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);
}

1 个答案:

答案 0 :(得分:0)

为什么不简单地断言 //variable of Emmiter.Listener Emmiter.Listener quizzoStatus = new Emitter.Listener(){ @Override public void call(Object... args){ runOnUiThread(new Runnable(){ @Override public void run(){ Log.e("opponet point", opponentPoints + " " + quizzoStatusResponseDto.getPoints()); } }); } }; //assigning the listener socket.on("quizzoStatus", quizzoStatus); . . . . @Override protected void onDestroy(){ super.onDestroy(); //removing the listener... socket.off("quizzoStatus", quizzoStatus); } 在测试结束时具有正确的值?

BaseUrl

如评论中所建议,var baseUrl = _container.Get<IRestService>().BaseUrl; Assert.AreEqual(baseUrl, _baseUrl); 将不起作用。 _container.Assert<IRestService>(m => m.BaseUrl == _baseUrl)断言一个期望,而不仅仅是像常规断言一样断言真理。正确的语法应该是:

MockingContainer<T>.Assert

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