【发布时间】:2009-03-31 22:39:09
【问题描述】:
如果我有以下域对象:
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>
这个测试有什么价值吗?
[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 中自动生成这些类型的测试?还是说“不好”?
【问题讨论】:
标签: c# nhibernate tdd domain-driven-design