N替换if-else条件
NSubstitute if-else condition
美好的一天!我需要你的帮助,我有下一个测试:
[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 方法没有在测试中调用。但正如预期的那样,在这种情况下它调用了 运行 方法。所以,我无法想象问题出在哪里,所以非常感谢您的帮助。感谢您的宝贵时间!
This example passes。问题似乎出在您的示例中,它正在更改传递给 FillCamerasListView
的参数,如评论中所讨论的那样。
几个选项:
- 修改代码以符合测试的预期。即将
Run
的参数传递给 FillCamerasListView
.
- 使用
view.ReceivedWithAnyArgs().FillCamerasListView(null)
断言已进行调用,而无需担心所传递参数的具体细节。
- 使用
view.Received().FillCamerasListView(Arg.Is<List<string>>(x => Matches(x, argument))
,其中Matches
是您自己的代码,它根据传递给Run
的argument
判断给定的参数是否正确。
美好的一天!我需要你的帮助,我有下一个测试:
[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 方法没有在测试中调用。但正如预期的那样,在这种情况下它调用了 运行 方法。所以,我无法想象问题出在哪里,所以非常感谢您的帮助。感谢您的宝贵时间!
This example passes。问题似乎出在您的示例中,它正在更改传递给 FillCamerasListView
的参数,如评论中所讨论的那样。
几个选项:
- 修改代码以符合测试的预期。即将
Run
的参数传递给FillCamerasListView
. - 使用
view.ReceivedWithAnyArgs().FillCamerasListView(null)
断言已进行调用,而无需担心所传递参数的具体细节。 - 使用
view.Received().FillCamerasListView(Arg.Is<List<string>>(x => Matches(x, argument))
,其中Matches
是您自己的代码,它根据传递给Run
的argument
判断给定的参数是否正确。