2
我正在爲我的通用存儲庫層寫單元測試,但我有一些問題DbEntityEntry
。嘲笑DbEntityEntry
我的更新方法如下所示。
public virtual void Update(TEntity entityToUpdate) {
var entity = dbSet.Find(context.Entry<ITrackedEntity>(entityToUpdate).Entity.Id);
context.Entry(entity).CurrentValues.SetValues(entityToUpdate);
}
如您所見,context.Entry<TEntity>(TEntity entity)
方法由調用者調用。所以,雖然單元測試此代碼會拋出空異常。
我試圖模擬context.Entry
方法,但我不能,因爲我無法提供返回值。
我目前的測試方法是下面
[Fact]
public void UpdateTest() {
AssetType _sample1 = new AssetType() {
AssetTypeID = 1,
IsContainer = true,
Name = "Sample 1"
};
IDbSet<AssetType> assetTypeDbSet = new FakeDbSet<AssetType>(_sample1);
Mock<IDbContext> mockContext = new Mock<IDbContext>();
mockContext.Setup(pc => pc.Set<AssetType>()).Returns(assetTypeDbSet);
_sample1.Name = "Sample 1.1";
var dbEntity = mockContext.Object.Entry<ITrackedEntity>(_sample1);
mockContext.Setup(p => p.Entry<ITrackedEntity>(It.IsAny<AssetType>())).Returns(dbEntity);
using(GenericRepository<AssetType> repo = new GenericRepository<AssetType>(mockContext.Object)) {
repo.Update(_sample1);
var result = repo.GetAll(0, 0);
Assert.Equal(1, result.Count);
var singleResult = repo.GetByID(1);
Assert.Equal(_sample1.Name, singleResult.Name);
}
}
我試圖通過撥打測試context.Entry<>()
方法來獲得DbEntityEntry
值,但WA返回null
了。 此類別不能與new
運營商聯繫。所以我斯塔克..
嗯,我沒有那麼想。所以你建議我離開這個並寫集成測試,這將是我的下一步 –