gpt4 book ai didi

c# - 在 DDD/TDD 应用程序中测试持久层

转载 作者:行者123 更新时间:2023-11-30 22:50:12 25 4
gpt4 key购买 nike

如果我有以下域对象:

public class Customer
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual ISet<Order> Orders { get; set; }

public Customer()
{
Orders = new HashedSet<Order>();
}

public virtual void AddOrder(Order order)
{
order.Customer = this;
Orders.Add(order);
}
}

使用以下 NHibernate 映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Examples" assembly="Examples">
<class name="Customer">
<id name="Id">
<generator class="guid.comb" />
</id>
<property name="Name" length="50"/>
<set name="Orders" table="CustomerOrder" cascade="all-delete-orphan" lazy="true">
<key column="CustomerId"/>
<many-to-many class="Order" column="OrderId"/>
</set>
</class>
</hibernate-mapping>

这个测试有什么值(value)吗?

[Test]
public Save_NameWritten_SameNameIsReadback()
{
var expected = new Customer { Name = "Fred Quimby" };
_repo.Save(c);
var actual = _repo.Find(expected.Id);
Assert.AreEqual(expected.Name, actual.Name);
}

人们通常会像这样测试他们的持久层吗?确保每个字段都单独保留?老实说,我不确定这样的最佳做法是什么。我可以看到用长字符串和父/子关系测试某些东西——但是整数和日期呢?这是矫枉过正吗?

我这里只说持久层,而不是领域层的业务逻辑。为此,我会模拟存储库,而在这里我要验证存储库是否确实保存了我告诉它要保存的内容。如果有人忘记映射一个字段,或者他们在映射中有一个虚假的字符串长度怎么办?

是否有任何工具可以在 .NET 中自动生成这些类型的测试?还是那是“坏”?

最佳答案

如果您确保在不同的 session 中保存和获取数据,那么您可以有效地确保您的映射是正确的 - 这就是值(value)。

最好的方法是在内存数据库中使用 Fluent NHibernate 中的 PersistenceSpecification(这里是 post)之类的东西,它可以在不同的 session 中为您插入和选择数据。

关于c# - 在 DDD/TDD 应用程序中测试持久层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/703364/

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