【问题标题】:NSubstitute if-else conditionN替换 if-else 条件
【发布时间】:2016-10-25 07:59:46
【问题描述】:

美好的一天!我需要你的帮助,我有下一个测试:

    [SetUp]
    public void SetUp()
    {
        controller = Substitute.For<IApplicationController>();
        view = Substitute.For<ICamerasView>();
        presenter = new CamerasPresenter(controller, view);
        argument = InitializeDevicesList();
        presenter.Run(argument);
    }

    private List<string> InitializeDevicesList()
    {
        List<string> devicesList = new List<string>();
        Device device = new Device();

        devicesList.Add(device.Name);

        return devicesList;
    }

    [Test]
    public void RunIfDeviceListIsNotEmpty()
    {
        view.DidNotReceive().SetUIOnNoConnectedDevices();
        view.Received().FillCamerasListView(argument);
        view.Received().Show();

    }

实际测试下一个代码

    public override void Run(List<string> argument)
    {
        connectedCameras = argument;
        if(connectedCameras.Count == 0)
        {
            SetUIOnNoConnectedDevices();
        }
        else
        {
            FillCamerasListView();
        }
        View.Show();
    }

我的问题是 FillCamerasListView 方法没有在测试中调用。但正如预期的那样,在这种情况下它调用了 Run 方法。所以,我无法想象是什么问题,所以我将非常感谢您的帮助。感谢您的宝贵时间!

【问题讨论】:

  • `FillCamerasListView()` 是否调用view.FillCamerasListView(connectedCameras)?你得到的断言异常是什么?
  • 是的,当然。我在 Presenter 中调用的 SetUIOnNoConnectedDevices 和 FillCamerasListView 只是 view.FillCamerasListView 和 view.SetUIOnNoConnectedDevices 的简单包装。我在这个字符串上遇到异常 view.Received().FillCamerasListView(argument);正在测试中。
  • 异常错误:在 NSubstitute.dll 中发生类型为“NSubstitute.Exceptions.ReceivedCallsException”的异常,但未在用户代码中处理附加信息:预计会收到匹配的调用:FillCamerasListView(List ) 实际上没有收到匹配的电话。收到 1 个不匹配的调用(用“”字符表示的不匹配参数):FillCamerasListView(*List)
  • 看起来包装器正在修改传递给 FillCamerasListView 的参数。你能把那个包装贴出来吗?
  • 当然,但没有任何修改。 pastebin.com/N2UZ1gQp

标签: methods call nsubstitute


【解决方案1】:

This example passes。正如 cmets 中所讨论的那样,您的示例中的问题似乎是更改了传递给 FillCamerasListView 的参数。

几个选项:

  1. 修改代码以符合测试的预期。即将Run 的参数传递给FillCamerasListView
  2. 使用view.ReceivedWithAnyArgs().FillCamerasListView(null) 断言调用已完成,无需担心所传递参数的细​​节。
  3. 使用view.Received().FillCamerasListView(Arg.Is&lt;List&lt;string&gt;&gt;(x =&gt; Matches(x, argument)),其中Matches 是您自己的代码,它根据传递给Runargument 确定给定参数是否正确。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多