c# - 使类可测试

标签 c# .net unit-testing mocking internal

所以我有一个名为 User 的类。它有一个 internal 构造函数。我想创建一个 User 对象,这样我就可以像这样模拟它:

public ISessionManagerInstance MockedSessionManager()
{
    var manager = new Mock<ISessionManagerInstance>();
    var company = new Chatham.Web.Business.Classes.Company(500, "", "", Enumerations.WebRelationshipInfo.NotSet, "", 0, 0, Data.Login.TeamOwnership.NotSet, 0, 0, false, null, false);
    manager.Setup(p => p.Company).Returns(company);

    Chatham.Web.Business.Classes.User displayUser = typeof(Chatham.Web.Business.Classes.User);
    displayUser.EntityID = 1786;
    manager.Setup(p => p.DisplayUser).Returns(displayUser);

    return manager.Object;
}

现在,Company 有一个构造函数,所以这很容易。但是 User 有一个仅供内部使用。有什么办法可以创建一个 User 并为其设置一个 int 属性,这样我就可以将该对象传回 mock?

最佳答案

我可以想到两种可能性:

创建一个 IUser 接口(interface),让 User 实现它并针对它创建模拟。这是 .NET 测试领域中非常普遍的做法。您使用 Users 的所有方法现在很可能需要接受 IUser 引用。

另一种可能性(我不推荐,但它存在)是使用 InternalsVisibleTo装配属性。然后可以从测试组件中看到生产组件的内部结构。

关于c# - 使类可测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782770/

相关文章:

c# - 使用 LINQ 比较两个序列的差异

c# - 仅反序列化 JSON 响应的单个节点

javascript - 如何在 Chrome、Microsoft Edge 或任何其他浏览器中自动化 UI 测试?

c# - 如何解决 Gzip 魔数(Magic Number)丢失的问题

c# - 我需要一个正则表达式来验证斯里兰卡车号

c# - 防止继承的TabControl创建TabPages

c# - 自定义SynchronizationContext在unittest中异步设置Thread.CurrentPrincipal

python - 我如何在 Python 中对随机洗牌操作进行单元测试?

c# - 如何删除特定用户的注册表项?

C# 字符串比较等于 false