[英]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
的调用之后发生的。 我不确定这是否必要,但我想我会提到它。
通常的顺序是
hub
) 我希望看到更像的东西
// 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.