繁体   English   中英

FakeItEasy不验证对Full Framework SignalR测试的调用

[英]FakeItEasy not verifying call for Full Framework SignalR test

我有一个简单的集线器,我正在尝试用FakeItEasy编写测试,并且调用客户端的验证没有通过。 我有一个使用MOQ和XUnit的单独项目中的示例。

public interface IScheduleHubClientContract
{
    void UpdateToCheckedIn(string id);
}

public void UpdateToCheckedIn_Should_Broadcast_Id()
{
    var hub = new ScheduleHub();
    var clients = A.Fake<IHubCallerConnectionContext<dynamic>>();
    var all = A.Fake<IScheduleHubClientContract>();

    var id= "123456789";
    hub.Clients = clients;

    A.CallTo(() => all.UpdateToCheckedIn(A<string>.Ignored)).MustHaveHappened();
    A.CallTo(() => clients.All).Returns(all);

    hub.UpdateToCheckedIn(id);
}

我使用Fixie作为单元测试框架,它报告:

FakeItEasy.ExpectationException:

预计会发现一次或多次,但没有对假对象进行调用。

以下示例适用于XUnit和MOQ:

    public interface IScheduleClientContract
    {
        void UpdateToCheckedIn(string id);

    }

    [Fact]
    public void UpdateToCheckedIn_Should_Broadcast_Id()
    {
        var hub = new ScheduleHub();
        var clients = new Mock<IHubCallerConnectionContext<dynamic>>();
        var all = new Mock<IScheduleClientContract>();
        hub.Clients = clients.Object;
        all.Setup(m=>m.UpdateToCheckedIn(It.IsAny<string>())).Verifiable();
        clients.Setup(m => m.All).Returns(all.Object);

        hub.UpdateToCheckedIn("id");

        all.VerifyAll();

    }

我不确定转换过程中我错过了什么?

你正在做一些奇怪的事情(它看起来对我来说,没有看到你班级的内部)的命令,我相信这就是问题所在。

我认为你的关键问题是你试图验证all.UpdateToCheckedIn必须在调用hub.UpdateToCheckedIn之前发生。 (我不确定hub.UpdateToCheckedIn调用all.UpdateToCheckedIn ,但这听起来很合理。

还有另一个问题,您配置clients.Setup以返回all.Object ,这是在断言对all.UpdateToCheckedIn的调用之后发生的。 我不确定这是否必要,但我想我会提到它。

通常的顺序是

  1. 安排假货(以及你需要的任何其他东西)
  2. 行动,但行使被测系统( hub
  3. 声称对假货(或您认为成功所必需的任何其他条件)采取了预期的行动

我希望看到更像的东西

// Arrange the fakes
var all = A.Fake<IScheduleHubClientContract>();
var clients = A.Fake<IHubCallerConnectionContext<dynamic>>();
A.CallTo(() => clients.All).Returns(all); // if All has a getter, this could be clients.All = all

// … and arrange the system under test
var hub = new ScheduleHub();
hub.Clients = clients;

// Act, by exercising the system under test
var id = "123456789";
hub.UpdateToCheckedIn(id);

// Assert - verify that the expected calls were made to the Fakes
A.CallTo(() => all.UpdateToCheckedIn(A<string>.Ignored)).MustHaveHappened();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM