가 어떻게조롱 다중 인터페이스 워스는
machine.fakes와Substitute.For<DbSet<MyClass>, IQueryable<MyClass>, IDbAsyncEnumerable>()
의 등가물을 얻을 수 machine.fakes? 제가
var myFake = An<DbSet<MyClass>>();
myFake.WhenToldTo(m => ((IQueryable<MyClass>)m).Provider).Return(whatever);
를 사용하려하지만 다음 NotImplementedException 얻을 :
The member 'IQueryable.Provider' has not been implemented on type 'DbSet`1Proxy' which
inherits from 'DbSet`1'. Test doubles for 'DbSet`1' must provide implementations of
methods and properties that are used.
같은 예외 myFake.WhenToldTo으로 제기 (m => ((에 IQueryable) m) .Provider) 뒷 덮개 (도대체 무엇이);
최소한의 코드로 문제를 재현하는 클래스입니다. 당신은
using System.Data.Entity;
using System.Linq;
using Machine.Fakes;
using Machine.Specifications;
namespace SpecsTests
{
public class TestClass
{}
[Subject("Test")]
internal class TestSpecifications
{
[Subject("Test")]
private class Test : WithFakes
{
private static int Count;
private static DbSet<TestClass> Subject;
private Establish context =() =>
{
var data = new [] { new TestClass() }.AsQueryable();
Subject = An<DbSet<TestClass>>();
Subject.WhenToldTo(m => ((IQueryable)m).Provider).Return(data.Provider);
};
private Because of =() => { Count = Subject.Count(); };
private It Should_return_expected_results =() =>
{
Count.ShouldEqual(1);
};
}
}
}
나는 (캐스트없이) 코드를 얻을 수 있습니다. 그래서 그 문제는 다른 곳에 있어야합니다. 나머지 코드 나 가장 간단한 예제를 보여줄 수 있습니까? –
문제 설명이 개선되었습니다. "캐스트가 없다"는 것은 무엇을 의미합니까? 람다에서 IQueryable로 캐스팅하지 않으면 컴파일 오류가 발생합니다 (cacnnot은 IQueryable.Provider의 명시 적 구현에 액세스 함) –
코드가 실행되지 않아서 컴퓨터에서 코드 조각을 분석 할 수 없으므로 문제를 분석 할 수 없습니다. DbSet의 전체 사양 및 선언을 제공해주십시오. –