gpt4 book ai didi

c# - 我如何对仅由 NHibernate 设置的 protected 属性进行单元测试?

转载 作者:可可西里 更新时间:2023-11-01 08:33:45 26 4
gpt4 key购买 nike

我正在使用 NHibernate 来持久化这个实体:

public class Store
{
public int Id { get; protected set; }
public int Name { get; set; }
}

请注意 Id 属性如何具有 protected setter 。这是为了防止用户更改 Id,同时仍然允许 NHibernate 在将它保存到数据库时为其分配一个 Id

在我的一个单元测试中,我使用带有以下代码的 Moq 来模拟我的存储库:

var mock = new Mock<IRepository>();
mock.Setup(x => x.GetById<Store>(It.IsAny<int>()))
.Returns(new Store { Value = "Walmart" }); // can't set the ID here

var store = Repository.GetById<Store>(5);
Assert.That(store.Id == 5);

当我告诉 Moq 返回一个新的 Store 实例时,我无法分配 ID,单元测试失败。我如何对该属性进行单元测试?我不想更改该属性的访问级别,因为我不想让用户手动更改它,但这正是我必须在此处进行测试才能进行的操作。

最佳答案

只是将其作为另一种方法抛出,您可以使 setter protected internal:

public class Store
{
public int Id { get; protected internal set; }
public int Name { get; set; }
}

并使用 InternalsVisibleTo 属性:

[assembly: InternalsVisibleTo("StoreUnitTests")]

关于c# - 我如何对仅由 NHibernate 设置的 protected 属性进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com