UnitTestBase.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Abp.TestBase;
  2. using Buissness.UnitTest.InitialData;
  3. using Business.Core.MongoDBHelper;
  4. using Business.EntityFrameworkCore;
  5. using Castle.MicroKernel.Registration;
  6. using System.Data.Common;
  7. using Volo.Abp.Modularity;
  8. namespace Buissness.UnitTest
  9. {
  10. /// <summary>
  11. /// 这是所有测试类的基础类。
  12. /// 它准备了ABP系统,模块和一个假的内存数据库。
  13. /// 具有初始数据的种子数据库(<see cref =“SimpleTaskSystemInitialDataBuilder”/>)。
  14. /// 提供使用DbContext轻松使用的方法。
  15. /// </summary>
  16. public abstract class UnitTestBase: AbpIntegratedTestBase<UnitTestModule>
  17. {
  18. protected UnitTestBase()
  19. {
  20. //种子初始数据
  21. UsingDbContext(context => new UnitTestInitialDataBuilder().Build(context));
  22. }
  23. protected override void PreInitialize()
  24. {
  25. //假DbConnection使用Effort!
  26. LocalIocManager.IocContainer.Register(
  27. Component.For<DbConnection>()
  28. .UsingFactoryMethod(Effort.DbConnectionFactory.CreateTransient)
  29. .LifestyleSingleton()
  30. );
  31. base.PreInitialize();
  32. }
  33. public void UsingDbContext(Action<BusinessDbContext> action)
  34. {
  35. using (var context = LocalIocManager.Resolve<BusinessDbContext>())
  36. {
  37. action(context);
  38. context.SaveChanges();
  39. }
  40. }
  41. public T UsingDbContext<T>(Func<BusinessDbContext, T> func)
  42. {
  43. T result;
  44. using (var context = LocalIocManager.Resolve<BusinessDbContext>())
  45. {
  46. result = func(context);
  47. context.SaveChanges();
  48. }
  49. return result;
  50. }
  51. }
  52. }