【问题标题】:Am I creating fakes correctly with nsubstitue?我是否使用 nsubstitute 正确创建了假货?
【发布时间】:2015-10-07 02:46:47
【问题描述】:

我有一个任务是学习如何使用隔离框架。我想知道我是否正在使用 nsubstitute 以专有的方式制造假货。这是应用程序应该看起来像 的序列图。

然后我进行了单元测试并提交了练习。有人告诉我,我没有使用隔离框架来制造假货(而不是之前我们自己制造的)。这是我的两个测试的示例:

    [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 构造函数的参数需要它,所以我看不到存根它们的理由)?

【问题讨论】:

    标签: c# unit-testing nsubstitute isolation-frameworks


    【解决方案1】:

    是的,您正确地使用了 NSubstitute。我不知道你是否应该测试其他东西而不是你所做的。

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 2013-07-25
      • 2011-04-06
      • 2011-07-14
      • 2014-07-19
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多