我想使用 Firebase SDK 使用 Moq 在 C# 中为我的代码编写一个单元测试,特别涉及 GetUserAsync(),例如UserRecord user = GetUserAsync(Uid) 但我陷入了 Firebase UserRecord 内部类。鉴于 UserRecord 类具有只读内部结构,我如何模拟 UserRecord 类以进行测试?
到目前为止我尝试过的:
var firebase = new Mock<IFirebaseAppWrapper>();
firebase
.Setup(x => x.GetUserAsync(It.IsAny<string>()))
.Returns<UserRecord>(usr =>
{
var item = new Mock<UserRecord>("1");
return Task.FromResult(item.Object);
});
当然这不起作用,但感觉很接近。有什么建议吗? 顺便说一句:FirebaseApp 已被人为地包装在传递类中,并具有对应的接口类。
谢谢
您应该使用
ReturnsAsync
方法而不是 Returns
。
Returns
用于同步方法。另一方面,如果您希望在等待调用后指定 async
方法的响应,则需要 ReturnsAsync
。
编辑:
如果
GetUserAsync
返回 UserRecord
那么你可以只实例化一个:
firebase
.Setup(x => x.GetUserAsync(It.IsAny<string>()))
.ReturnsAsync(new UserRecord("id"));
你可以尝试一下:
var firebase = new Mock<IFirebaseAppWrapper>();
firebase
.Setup(x => x.GetUserAsync(It.IsAny<string>()))
.Returns<UserRecord>(usr =>
{
var item = new Mock<UserRecord>();
item.Setup(i => i.Uid).Returns("id");
return Task.FromResult(item.Object);
});