[Moq 사용]MOQ가 null을 반환합니다. [모의 콘크리트 클래스 방법]
구체적인 클래스를 조롱하고 해당 클래스의 가상 메서드 "Get()"을 조롱하려고합니다. "GetItemsNotNull()"메서드를 테스트 할 때 나는 조롱 된 함수가 반환되는 대신 항상 null을 반환합니다. 여기
는//SomeClasses.cs
namespace MoQExamples
{
public abstract class Entity
{
}
public class Abc : Entity
{
}
public interface IRepository<T> where T : Entity
{
IQueryable<T> Get();
}
public class Repository<T> : IRepository<T> where T : Entity
{
private readonly ISession _session;
public Repository()
{
_session = null;
}
public Repository(ISession session)
{
_session = session;
}
protected ISession CurrentSession
{
get { return _session; }
}
public virtual IQueryable<T> Get()
{
return CurrentSession.Query<T>();
}
}
public interface IAbcRepository
{
Abc GetItemsNotNull();
}
public class AbcRepository : Repository<Abc>, IAbcRepository
{
public Abc GetItemsNotNull()
{
return Get().FirstOrDefault(abc => abc !=null);
}
}
}
여기가 테스트 클래스를 인 코드
namespace MoQExamples
{
[TestFixture]
public class SomeClassesTest
{
private readonly Mock<AbcRepository> _abcRepositoryMock = new Mock<AbcRepository>(MockBehavior.Strict) { CallBase = true };
[SetUp]
public void SetupTest()
{
_abcRepositoryMock.Setup(x => x.Get()).Returns(Get);
}
public IQueryable<Abc> Get()
{
return (new List<Abc>() { new Abc() }) as IQueryable<Abc>;
}
[Test]
public void TestGetItemsNotNull()
{
Assert.IsNotNull(_abcRepositoryMock.Object.GetItemsNotNull());
}
}
}
SomeClassesTest.Get를 (반환 어설 alays fails..instead)
선배 들께 감사드립니다!
return (new List<Abc>() { new Abc() }) as IQueryable<Abc>;
List<T>
IQueryable<T>
를 구현하지 않기 때문에이 것
항상는 null :
버전 : 4.0.10827.0 –