我是否使用 nsubstitute 正确地创建了假货?
Am I creating fakes correctly with nsubstitue?
我接到了一项作业,学习您如何使用隔离框架。我想知道我是否正在使用 nsubstitute 以专有的方式制造假货。这是应用程序的顺序图 .
然后我做了单元测试并交了习题。有人告诉我,我没有使用隔离框架来创建假货(而不是之前我们自己制作的)。这是我的 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?还是我还需要添加一些其他东西(警报 class 未在这两个测试用例中使用,但 DoorControl 构造函数的参数需要,所以我看不出有理由对它们进行存根)?
是的,您正确使用了 NSubstitute。我不可能知道你是否应该测试其他东西而不是你所做的。
我接到了一项作业,学习您如何使用隔离框架。我想知道我是否正在使用 nsubstitute 以专有的方式制造假货。这是应用程序的顺序图
然后我做了单元测试并交了习题。有人告诉我,我没有使用隔离框架来创建假货(而不是之前我们自己制作的)。这是我的 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?还是我还需要添加一些其他东西(警报 class 未在这两个测试用例中使用,但 DoorControl 构造函数的参数需要,所以我看不出有理由对它们进行存根)?
是的,您正确使用了 NSubstitute。我不可能知道你是否应该测试其他东西而不是你所做的。