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構造函數的參數需要,所以我看不到有理由將它們存根)?