2015-10-07 18 views
0

我得到一個任務,瞭解如何使用隔離框架。我想知道我是否用nsubstitute創造假貨的方式。下面是應用程序如何看起來像Here的順序圖。我是否用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構造函數的參數需要,所以我看不到有理由將它們存根)?

回答

1

是的,你正在使用NSubstitute。我不可能知道你是否應該測試別的東西而不是你所做的。