【发布时间】:2018-10-08 16:43:32
【问题描述】:
我正在开发一个用 c# 编写的不和谐机器人项目,目前正在尝试使用 NUnit 和 Moq 为系统实施单元测试。对于其中一项功能,我需要访问服务器角色,这是由 client.Guilds.First().Roles.Where(r => r.Name.Equals(roleName)).FirstOrDefault();(ListManager.ModifyPermission,第 116 行 ListManager.cs)完成的。 client 对象是 Discord.Net 库中 DiscordSocketClient 的一个实例,并被传递到类的构造函数中,通过依赖注入访问角色。所以特别是我需要client.Guilds.First().Roles 来返回一个包含两个模拟角色的集合。然而,我的问题是,Moq 不支持模拟 SocketRole 或 SocketGuild(公会对象的容器)等非虚拟类。它们每个都实现了一个相应的接口(IRole、IGuild),但是不可能从该接口转换为它的相关类。
The entire code can be accessed here.受影响的是ListManager 类。 ListManagerTestsHelper.GetDiscordSocketClient 是模拟客户端的地方。我已经考虑过将现有角色的列表直接传递给 ListManager 类,但是依赖注入是在 DiscordSocketClient 连接之前设置的,因此在设置时没有分配给它的角色。
编辑:
一般来说,我只需要知道,是否有办法从模拟对象返回 Collection
【问题讨论】:
标签: c# nunit moq discord.net