大佬教程收集整理的这篇文章主要介绍了单元测试 – 单元测试LINQ2SQL存储库,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
哪一种是这种情况的最佳方法?
>让每个测试在我的真实开发数据库上运行,但确保每个测试自己清理
>为单元测试创建我的开发数据库和dbml的副本,并使用该上下文,以便我可以在每个测试运行之前清除整个数据库
>找出一些嘲弄Datacontext的精心设计的方式(请记住,我是一个总Moq noob).
>完全不一样的东西在每次测试运行之前,可能会自动为我设置数据库?
编辑:我刚刚了解到,MBUnit具有一个回滚属性,可以反转由测试用例运行的任何数据库操作.我不是特别关注MSTest,所以这可以简单地解答我的问题吗?
@H_772_11@我将在下面包含我的FakeDataContextwrapper实现:
public class FakeDataContextwrapper : IDataContextwrapper { public DataContext Context { get { return null; } } private List<object> Added = new List<object>(); private List<object> deleted = new List<object>(); private readonly IFakeDatabase mockDatabase; public FakeDataContextwrapper( IFakeDatabase database ) { mockDatabase = database; } protected List<T> InternalTable<T>() where T : class { return (List<T>)mockDatabase.Tables[typeof( T )]; } #region IDataContextwrapper Members public virtual IQueryable<T> Table<T>() where T : class { return mockDatabase.GetTable<T>(); } public virtual ITable Table( Type type ) { return new FakeTable( mockDatabase.Tables[type],type ); } public virtual void deleteallOnSubmit<T>( IEnumerable<T> entities ) where T : class { foreach (var entity in entities) { deleteOnSubmit( entity ); } } public virtual void deleteOnSubmit<T>( T entity ) where T : class { this.deleted.Add( entity ); } public virtual void InsertAllOnSubmit<T>( IEnumerable<T> entities ) where T : class { foreach (var entity in entities) { InsertOnSubmit( entity ); } } public virtual void InsertOnSubmit<T>( T entity ) where T : class { this.Added.Add( entity ); } public virtual void SubmitChanges() { this.SubmitChanges( ConflictMode.FailOnFirstConflict ); } public virtual void SubmitChanges( ConflictMode failureMode ) { try { foreach (object obj in this.Added) { MethodInfo validator = obj.GetType().getmethod( "OnValidate",BindingFlags.Instance | BindingFlags.NonPublic ); if (validator != null) { validator.Invoke( obj,new object[] { ChangeAction.Insert } ); } this.mockDatabase.Tables[obj.GetType()].Add( obj ); } this.Added.Clear(); foreach (object obj in this.deleted) { MethodInfo validator = obj.GetType().getmethod( "OnValidate",BindingFlags.Instance | BindingFlags.NonPublic ); if (validator != null) { validator.Invoke( obj,new object[] { ChangeAction.delete } ); } this.mockDatabase.Tables[obj.GetType()].Remove( obj ); } this.deleted.Clear(); foreach (keyvaluePair<Type,IList> tablePair in this.mockDatabase.Tables) { MethodInfo validator = tablePair.Key.getmethod( "OnValidate",BindingFlags.Instance | BindingFlags.NonPublic ); if (validator != null) { foreach (object obj in tablePair.value) { validator.Invoke( obj,new object[] { ChangeAction.update } ); } } } } catch (TargeTinvocationException E) { throw e.InnerException; } } public void dispose() { } #endregion }@H_772_11@ @H_772_11@
以上是大佬教程为你收集整理的单元测试 – 单元测试LINQ2SQL存储库全部内容,希望文章能够帮你解决单元测试 – 单元测试LINQ2SQL存储库所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。