0
我是嘲笑新人。我試圖用JustMock來模擬我的dbContext。我正在使用實體框架6.在實體框架6中,一些功能是異步的。我成功地模擬同步方法,並且我的測試成功通過。但我陷入異步方法。 我的測試仍然通過後,我把錯誤的斷言。如何在JustMock中模擬異步方法?
這裏是我的代碼:
基礎信息庫:
public class BaseRepository<T> : IRepositoryBase<T> where T : class, IEntity, new()
{
protected readonly DbContext InnerDbContext;
protected DbSet<T> InnerDbSet;
public BaseRepository(DbContext innerDbContext)
{
InnerDbContext = innerDbContext;
InnerDbSet = InnerDbContext.Set<T>();
}
public virtual void Add(T entity)
{
InnerDbSet.Add(entity);
}
public virtual Task<T> FindAsync(long id)
{
return InnerDbSet.FirstOrDefaultAsync(x => x.Id == id && !x.IsDelete);
}
}
的DbContext:
public class TimeSketchContext : DbContext
{
public DbSet<EmployeeSkill> EmployeeSkill { get; set; }
}
測試:
public class BaseRepositoryTest
{
readonly TimeSketchContext _mockDataContext = Mock.Create<TimeSketchContext>();
private BaseRepository<EmployeeSkill> _repository;
public BaseRepositoryTest()
{
_repository = new BaseRepository<EmployeeSkill>(_mockDataContext);
}
[Fact]
public void Add_Should_Call_Once()
{
_repository.Add(Arg.IsAny<EmployeeSkill>());
Mock.Assert(() => _mockDataContext.Set<EmployeeSkill>().Add(Arg.IsAny<EmployeeSkill>()), Occurs.Once());
}
[Fact]
public async void Find_Should_Call_Once()
{
await _repository.FindAsync(Arg.AnyInt);
Mock.Assert(() => _mockDataContext.Set<EmployeeSkill>().LastOrDefault(x => x.Id == Arg.AnyInt && !x.IsDelete), Occurs.Once());
// This Test Will be fail Because my _repository.FindAsync is call FirstOrDefaultAsync. But it is pass.
}
}
我使用:
- 的Visual Studio 2013旗艦版
- .NET 4.5.1
- JustMock 2013年第三季度(2013.3.1015.0)
- 的xUnit