0
我得到一个任务,了解如何使用隔离框架。我想知道我是否用nsubstitute创造假货的方式。下面是应用程序如何看起来像的顺序图。我是否用nsubstitue创建假货?
然后我做了单元测试并递交了练习。有人告诉我,我没有使用隔离框架来制造假货(而不是早些时候我们自己制造假货)。下面是如何的我的测试2看上去像一个例子:
[Test]
public void RequestEntry_WithValidId_DoorStateIsClosed()
{
var door = new Door();
var alarm = new Alarm();
var userValidation = new UserValidation();
var entryNotifier = Substitute.For<IEntryNotification>();
var uut = new DoorControl(userValidation, entryNotifier, door, alarm);
door.DoorCtrl = uut;
uut.RequestEntry(1);
Assert.That(uut.DState == DoorState.Closed);
entryNotifier.Received(1).EntryNotificationGranted();
}
和
public void RequestEntry_WithValidId_DoorOpens()
{
var door = Substitute.For<IDoor>();
var alarm = new Alarm();
var userValidation = new UserValidation();
var entryNotifier = new EntryNotification();
var uut = new DoorControl(userValidation, entryNotifier, door, alarm);
door.DoorCtrl = uut;
uut.RequestEntry(1);
door.Received(1).Open();
}
所以我知道一些事情是错在这两个测试,因为我需要存根在他们两个这样我已经改变了他们一下,让他们知道是这样的:
public void RequestEntry_WithValidId_CorrectIdParsedToUserValidation()
{
var door = Substitute.For<IDoor>();
var alarm = new Alarm();
var userValidation = Substitute.For<IUserValidation>();
userValidation.ValidateEntryRequest(Arg.Any<int>()).Returns(true);
var entryNotifier = Substitute.For<IEntryNotification>();
var uut = new DoorControl(userValidation, entryNotifier, door, alarm);
door.DoorCtrl = uut;
uut.RequestEntry(1);
userValidation.Received(1).ValidateEntryRequest(1);
}
和
public void RequestEntry_WithValidId_DoorOpens()
{
var door = Substitute.For<IDoor>();
var alarm = new Alarm();
var userValidation = Substitute.For<IUserValidation>();
userValidation.ValidateEntryRequest(Arg.Any<int>()).Returns(true);
var entryNotifier = Substitute.For<IEntryNotification>();
var uut = new DoorControl(userValidation, entryNotifier, door, alarm);
door.DoorCtrl = uut;
uut.RequestEntry(1);
door.Received(1).Open();
}
我正确使用nsubstitute吗?或者我是否还需要添加其他一些东西(Alarm类不用于这两个测试用例,但由DoorControl构造函数的参数需要,所以我看不到有理由将它们存根)?