그래서 비즈니스 로직 레이어에 대한 테스트 케이스를 작성하려고합니다. 나는 이미 NHibernate IQueryOver
객체를 반환하는 데이터 액세스 레이어를 조롱했습니다. IQueryOver
인터페이스를 구현하는 MockQueryOver
클래스를 만들었습니다. 왜냐하면 비즈니스 로직 레이어에 기능을 연결하여 스텁 된 IQueryOver
을 만드는 것이 나에게 적합하지 않았기 때문입니다.모의 Hibernate IQueryOverOrderBuilder 객체
어쨌든, 그 모든 작동하지만 문제는 내가 에 OrderBy()
할 때입니다.
public IQueryOverOrderBuilder<TRoot, TSubType> OrderBy(Expression<Func<TSubType, object>> path)
{
var func = path.Compile();
IList<TSubType> result = m_data.OrderBy(func).ToList();
var mockRepo = new MockRepository();
var queryOver = new MockQueryOver<TRoot, TSubType>(m_data);
IQueryOverOrderBuilder<TRoot, TSubType> mockOrderBuilder = mockRepo.StrictMock<IQueryOverOrderBuilder<TRoot, TSubType>>(queryOver, path);
mockOrderBuilder.Stub(x => x.Desc).Return(queryOver);
mockOrderBuilder.Stub(x => x.Asc).Return(queryOver);
return mockOrderBuilder;
}
문제는 RhinoMocks가 스텁 방법 중 하나에 예외가 발생한다는 것입니다 : 내 MockQueryOver
클래스에서, 지금이 바로 같은 OrderBy()
방법을 구현한다. 이것은 예외 : 나는 자 NHibernate 및 RhinoMocks에 새로 온 사람
System.NullReferenceException : Object reference not set to an instance of an object.
at NHibernate.Criterion.Lambda.QueryOverOrderBuilderBase`3.AddOrder(Func`2 orderStringDelegate, Func`2 orderDelegate)
at NHibernate.Criterion.Lambda.QueryOverOrderBuilderBase`3.get_Desc()
at NHibernate.Criterion.QueryOverBuilderExtensions.Desc(IQueryOverOrderBuilder`2 builder)
at BLL.Tests.Mock_Objects.MockQueryOver`2.<OrderBy>b__7(IQueryOverOrderBuilder`2 x) in MockQueryOverSubType.cs: line 239
, 그래서 나는이 장면 뒤에 무엇을하고 있는지 모르겠지만, 심지어는 인터페이스의 모형을 만드는거야하지만 것 같다, 메소드를 스텁하려고하면 여전히 구체적인 확장 메소드를 호출합니다.
이 문제를 명확히하거나 도와 주실 수 있습니까? 또한이 테스트 사례를 작성하기 시작한 이래로, 자유롭게 사용할 수있는 한 조롱 프레임 워크를 전환하는 데 신경 쓰지 않습니다.
고맙습니다.
예, 인터페이스와 같은 구체적인 클래스라는 것이 맞습니다. 중간 계층을 만드는 방법에 대한 기본적인 예를 들어 주시겠습니까? 내가 뭘 할 수 있는지 잘 모르겠다. –
비즈니스 논리와 NHibernate 사이에 추상화 계층을 만드는 방법에 대해 더 자세히 설명했습니다. 분명하고 도움이되기를 바랍니다. 그렇지 않은지 물어보십시오. –