나는이 내 저장소 인터페이스에서 다음과 같은 방법저장소 인터페이스 방법으로 Moq 사용?
IQueryable<T> GetQuery<T>(Expression<Func<T, bool>> predicate) where T : class;
나는 클래스가 나는 다음과 같은 생성자를 단위 테스트에 행동하는거야 있습니다
public MyClass(IUnitOfWork unitOfWork)
IUnitOfWork
인터페이스에있다
Repository Repository { get; }
그래서 내가 장치에 노력하고있어 MyClass.DoSomething()
방법 사장님을 테스트 : 노출 된 저장소 속성입니다 전자 그래서 :
//Arrange
var repositoryMock = new Mock<IUnitOfWork>();
repositoryMock.Setup(x => x.Repository.GetQuery<Account>(y => y.Id == 123))
.Returns(accounts.AsQueryable()); //This setup always fails
var myClass = new MyClass(repositoryMock.Object); //don't even get here
내가 얻을 예외는 다음과 같습니다 :
System.NotSupportedException : 잘못된 설정 A의 나는 실패 단위 테스트
Arrange
섹션이[TestInitialize] public void Setup() { accounts = new List<Account>() { new Account() { Id = 123 } }; }
다음 가상이 아닌 가상 (VB에서 재정의 가능) 멤버 : x => x.Repository.GetQuery (y => y.Id == 123)
나는 모의에 Setup
의 다른 변화를 시도했다 :
repositoryMock.Setup(x => x.Repository.GetQuery<Account>()).Returns((Account a) => accounts.AsQueryable().Where(z => z.Id == 123));
및
repositoryMock.Setup(x => x.Repository.GetQuery<Account>(y => y.Id == 123)).Returns((Account a) => accounts.AsQueryable().Where(z => z == a));
하지만 성공
을; 매번 동일한 예외가 발생합니다. 그들은 단위 테스트를 실행할 때 항상 같은 예외를 throw합니다. 내가 Interface를 사용하여 조롱당하는 이유는 무엇입니까?이 예외가 발생하는 이유는 무엇입니까? 감사!
이것은 기술적으로 * 내가 얻은 오류를 해결하기 위해 내 원래 게시물에 대한 답변입니다. 그러나 이것을 적용한 후에도 원래의 쿼리와 구문은 틀렸고 @HuseinRoncevic의 대답은 내가 가지고 있었던 다른 문제를 해결했습니다. 두 가지 모두에게 감사의 말로 대답을 표시하십시오. – atconway