日安!我需要你的帮助,我还有下一个测试:
[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方法。所以,我无法想象是什么问题,所以我会非常感谢您的帮助。耽误您时间,实在对不起!
发布于 2016-10-27 03:14:01
这个例子过去了。问题似乎是在您的示例中更改传递给FillCamerasListView的参数,如注释中所讨论的那样。
有几种选择:
Run的参数传递给FillCamerasListView。view.ReceivedWithAnyArgs().FillCamerasListView(null)断言调用是在不担心传递的参数的细节的情况下进行的。view.Received().FillCamerasListView(Arg.Is<List<string>>(x => Matches(x, argument)),其中Matches是您自己的代码,它根据传递给Run的argument确定给定的参数是否正确。https://stackoverflow.com/questions/40234454
复制相似问题