2015-10-07 33 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。我不可能知道你是否应该测试别的东西而不是你所做的。