Ayite가 SQLite로 NHib 유닛 테스트를위한 간단한 기본 테스트 픽스처를 만들 때 내가 생각한 것이 great article 인 것을 발견했다.NHibernate unit 테스트 케이스 101
여기 내 질문은 구체적인 테스트 픽스처의 테스트 케이스 코드입니다. 아래의 EX_1에서 Ayende는 그가 저지른 트랜잭션에 페치를 저장하고 둘 사이에 Session.Clear를 저장합니다. 이 과정은 물론 EX_2도 마찬가지입니다.
모든 것들이 더 작고 읽기 쉬운 EX_2를 선호합니다. EX_1의 추가 코드가 왜 혼란스러운 가치가있는 이유에 대한 의견이 있으십니까?
건배,
Berryl
==== EX_1 =====
[Fact]
public void CanSaveAndLoadBlog_EX_1()
{
object id;
using (var tx = session.BeginTransaction())
{
id = session.Save(new Blog
{
AllowsComments = true,
CreatedAt = new DateTime(2000,1,1),
Subtitle = "Hello",
Title = "World",
});
tx.Commit();
}
session.Clear();
using (var tx = session.BeginTransaction())
{
var blog = session.Get<Blog>(id);
Assert.Equal(new DateTime(2000, 1, 1), blog.CreatedAt);
Assert.Equal("Hello", blog.Subtitle);
Assert.Equal("World", blog.Title);
Assert.True(blog.AllowsComments);
tx.Commit();
}
}
==== EX_2 =====
[Fact]
public void CanSaveAndLoadBlog_EX_2()
{
var id = session.Save(new Blog
{
AllowsComments = true,
CreatedAt = new DateTime(2000, 1, 1),
Subtitle = "Hello",
Title = "World",
});
var fromDb = session.Get<Blog>(id);
Assert.Equal(new DateTime(2000, 1, 1), fromDb.CreatedAt);
Assert.Equal("Hello", fromDb.Subtitle);
Assert.Equal("World", fromDb.Title);
Assert.True(fromDb.AllowsComments);
}
@Emmanuel - 나는 Hibernate와의 읽기 작업을 위해 항상 트랜잭션을 사용한다는 것을 몰랐다. 그것을 지적 주셔서 감사합니다. 문서 11.2 절에서도이를 확인할 수 있습니다. (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/transactions.html) "읽기 전용 인 경우에도 항상 명확한 트랜잭션 경계를 사용하십시오. 작업. " – dcp