有什么创造性的方法可以使这个方法通用,我讨厌到处复制粘贴它:
private CoachContext GetMockContext(Mock<DbSet<LastViewedRecord>> mockSet) {
var autoFixture = new Fixture();
DbContextOptions<CoachContext> options = autoFixture
.Build<DbContextOptions<CoachContext>>()
.Create();
var mockContext = new Mock<CoachContext>(options);
mockContext.Setup(c => c.LastViewedRecords).Returns(mockSet.Object);
return mockContext.Object;
}
我可以将 LastViewedRecord
变成 T
并使方法通用,但我无法绕过 c => c.LastViewedRecords
解决方案:我将方法签名更改为如下所示:
protected CreditCoachContext GetMockContext<T>(
IQueryable<T> mockData,
Expression<Func<CreditCoachContext,
DbSet<T>>> contextExpression
) where T : class
最佳答案
这样的事情可能会有所帮助。 (PS:我对Fixture
不太确定)
private TReturn GetMockContext<TContext, TEntity, TReturn>(Mock<DbSet<TEntity>> mockSet,
Expression<Func<CreditCoachContext>> contextExpression)
where TContext : DbContext, new()
where TEntity : class
where TReturn : class
{
var autoFixture = new Fixture();
DbContextOptions<TContext> options = autoFixture
.Build<DbContextOptions<TContext>>()
.Create();
var mockContext = new Mock<TContext>(options);
mockContext.Setup(contextExpression).Returns(mockSet.Object);
return mockContext.Object;
}
关于c# - 使用可变参数使此方法通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54295169/