添加单元测试
This commit is contained in:
parent
30e414bd56
commit
bfa7904848
|
@ -15,7 +15,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RoutingRuleEngine
|
|||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
/// <summary>
|
||||
/// 表路由规则引擎工厂
|
||||
/// 表路由规则引擎工厂
|
||||
/// </summary>
|
||||
public class TableRouteRuleEngineFactory<TShardingDbContext> : ITableRouteRuleEngineFactory<TShardingDbContext> where TShardingDbContext : DbContext, IShardingDbContext
|
||||
{
|
||||
|
@ -26,7 +26,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.RoutingRuleEngine
|
|||
_tableRouteRuleEngine = tableRouteRuleEngine;
|
||||
}
|
||||
/// <summary>
|
||||
/// 创建表路由上下文
|
||||
/// 创建表路由上下文
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="queryable"></param>
|
||||
|
|
|
@ -509,5 +509,6 @@ namespace ShardingCore.Sharding
|
|||
//{
|
||||
// return ShardingDbContextExecutor.GetCurrentDbContexts();
|
||||
//}
|
||||
|
||||
}
|
||||
}
|
|
@ -9,7 +9,7 @@ using ShardingCore.Sharding.ShardingQueryExecutors;
|
|||
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description: µü´ú¾ÛºÏÁ÷ʽÒýÇæ
|
||||
* @Description: 迭代聚合流式引擎
|
||||
* @Date: Saturday, 14 August 2021 22:07:28
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,182 @@
|
|||
// using System.Collections.ObjectModel;
|
||||
// using System.Reflection;
|
||||
// using ShardingCore.Core.EntityMetadatas;
|
||||
// using ShardingCore.Core.VirtualRoutes;
|
||||
// using ShardingCore.Helpers;
|
||||
// using ShardingCore.Utils;
|
||||
// using Xunit;
|
||||
//
|
||||
// namespace ShardingCore.CommonTest
|
||||
// {
|
||||
// /// <summary>
|
||||
// /// 测试按年分库,按月分表
|
||||
// /// </summary>
|
||||
// public class ShardingTimeAll
|
||||
// {
|
||||
// private readonly EntityMetadata _testEntityMetadata;
|
||||
// private readonly List<string> _allTables;
|
||||
// private readonly List<string> _allDataSources;
|
||||
// public ShardingTimeAll()
|
||||
// {
|
||||
// var entityMetadata = new EntityMetadata(typeof(TestTimeShardingEntity), nameof(TestTimeShardingEntity), typeof(ShardingDataSourceMod),
|
||||
// new ReadOnlyCollection<PropertyInfo>(typeof(TestTimeShardingEntity).GetProperties().ToList()), null);
|
||||
// //分库
|
||||
// var entityMetadataDataSourceBuilder = EntityMetadataDataSourceBuilder<TestTimeShardingEntity>.CreateEntityMetadataDataSourceBuilder(entityMetadata);
|
||||
// entityMetadataDataSourceBuilder.ShardingProperty(o => o.Time);
|
||||
// entityMetadata.CheckShardingDataSourceMetadata();
|
||||
// //分表
|
||||
// var entityMetadataTableBuilder = EntityMetadataTableBuilder<TestTimeShardingEntity>.CreateEntityMetadataTableBuilder(entityMetadata);
|
||||
// entityMetadataTableBuilder.ShardingProperty(o => o.Time);
|
||||
// entityMetadata.CheckShardingTableMetadata();
|
||||
// _testEntityMetadata = entityMetadata;
|
||||
// //[01....12]
|
||||
// _allTables = Enumerable.Range(1,13).Select(o=>o.ToString().PadLeft(2,'0')).ToList();
|
||||
// _allDataSources = new[] { "2020", "2021", "2022" }.ToList();
|
||||
// }
|
||||
//
|
||||
// public static Func<string, bool> GetDataSourceRouteFilter(object shardingValue, ShardingOperatorEnum shardingOperator,
|
||||
// string propertyName)
|
||||
// {
|
||||
// if (propertyName != nameof(TestTimeEntity.Time))
|
||||
// {
|
||||
// throw new Exception($"{nameof(propertyName)}:[{propertyName}] error");
|
||||
// }
|
||||
//
|
||||
// var shardingKey = (DateTime)shardingValue;
|
||||
// var t = $"{shardingKey:yyyy}";
|
||||
// switch (shardingOperator)
|
||||
// {
|
||||
// case ShardingOperatorEnum.GreaterThan:
|
||||
// case ShardingOperatorEnum.GreaterThanOrEqual:
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) >= 0;
|
||||
// case ShardingOperatorEnum.LessThan:
|
||||
// {
|
||||
// var currentYear =new DateTime(shardingKey.Year,1,1);
|
||||
// //处于临界值 o=>o.time < [2021-01-01 00:00:00] 尾巴20210101不应该被返回
|
||||
// if (currentYear == shardingKey)
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) < 0;
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
|
||||
// }
|
||||
// case ShardingOperatorEnum.LessThanOrEqual:
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
|
||||
// case ShardingOperatorEnum.Equal: return tail => tail == t;
|
||||
// default:
|
||||
// {
|
||||
// return tail => true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// public static Func<string, bool> GetTableRouteFilter(object shardingValue, ShardingOperatorEnum shardingOperator,
|
||||
// string propertyName)
|
||||
// {
|
||||
// if (propertyName != nameof(TestTimeEntity.Time))
|
||||
// {
|
||||
// throw new Exception($"{nameof(propertyName)}:[{propertyName}] error");
|
||||
// }
|
||||
//
|
||||
// var shardingKey = (DateTime)shardingValue;
|
||||
// var t = $"{shardingKey:MM}";
|
||||
// switch (shardingOperator)
|
||||
// {
|
||||
// case ShardingOperatorEnum.GreaterThan:
|
||||
// case ShardingOperatorEnum.GreaterThanOrEqual:
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) >= 0;
|
||||
// case ShardingOperatorEnum.LessThan:
|
||||
// {
|
||||
// var currentMonth = ShardingCoreHelper.GetCurrentMonthFirstDay(shardingKey);
|
||||
// //处于临界值 o=>o.time < [2021-01-01 00:00:00] 尾巴20210101不应该被返回
|
||||
// if (currentMonth == shardingKey)
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) < 0;
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
|
||||
// }
|
||||
// case ShardingOperatorEnum.LessThanOrEqual:
|
||||
// return tail => String.Compare(tail, t, StringComparison.Ordinal) <= 0;
|
||||
// case ShardingOperatorEnum.Equal: return tail => tail == t;
|
||||
// default:
|
||||
// {
|
||||
// return tail => true;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// private void TestDataSource(IQueryable<TestTimeShardingEntity> queryable, string[] dataSources)
|
||||
// {
|
||||
// var routePredicateExpression = ShardingUtil.GetRouteParseExpression(queryable,_testEntityMetadata,GetDataSourceRouteFilter,false);
|
||||
// Assert.NotNull(routePredicateExpression);
|
||||
// var routePredicate = routePredicateExpression.GetRoutePredicate();
|
||||
//
|
||||
// var list = _allDataSources.Where(routePredicate).ToList();
|
||||
// Assert.NotNull(list);
|
||||
// Assert.Equal(dataSources.Length,list.Count);
|
||||
// foreach (var table in dataSources)
|
||||
// {
|
||||
// Assert.True(list.Any(o=>o==table));
|
||||
// }
|
||||
// }
|
||||
// private void TestTable(IQueryable<TestTimeShardingEntity> queryable, string[] tables)
|
||||
// {
|
||||
// var routePredicateExpression = ShardingUtil.GetRouteParseExpression(queryable,_testEntityMetadata,GetTableRouteFilter,true);
|
||||
// Assert.NotNull(routePredicateExpression);
|
||||
// var routePredicate = routePredicateExpression.GetRoutePredicate();
|
||||
//
|
||||
// var list = _allTables.Where(routePredicate).ToList();
|
||||
// Assert.NotNull(list);
|
||||
// Assert.Equal(tables.Length,list.Count);
|
||||
// foreach (var table in tables)
|
||||
// {
|
||||
// Assert.True(list.Any(o=>o==table));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void TestForDataSource(List<IQueryable<TestTimeShardingEntity>> queryables, string[] dataSources)
|
||||
// {
|
||||
// foreach (var queryable in queryables)
|
||||
// {
|
||||
// TestDataSource(queryable, dataSources);
|
||||
// }
|
||||
// }
|
||||
// private void TestForTable(List<IQueryable<TestTimeShardingEntity>> queryables, string[] tables)
|
||||
// {
|
||||
// foreach (var queryable in queryables)
|
||||
// {
|
||||
// TestTable(queryable, tables);
|
||||
// }
|
||||
// }
|
||||
// [Fact]
|
||||
// public void TestSingleDataSource()
|
||||
// {
|
||||
// var dataSources = new []{"2021"};
|
||||
// var tables = new []{"01","02","03","04","05","06","07","08"};
|
||||
// var queryTime = new DateTime(2021, 1, 2);
|
||||
// var queryTime1 = queryTime.AddMonths(7);
|
||||
// var queryables=new List<IQueryable<TestTimeShardingEntity>>()
|
||||
// {
|
||||
// new List<TestTimeShardingEntity>().AsQueryable().Where(o=>o.Time>=queryTime&&o.Time<=queryTime1),
|
||||
// new List<TestTimeShardingEntity>().AsQueryable().Where(o=>o.Time<=queryTime1&&o.Time>=queryTime)
|
||||
// };
|
||||
// TestForDataSource(queryables,dataSources);
|
||||
// TestForTable(queryables,tables);
|
||||
// }
|
||||
// [Fact]
|
||||
// public void TestMultiDataSource()
|
||||
// {
|
||||
// var dataSources = new []{"2021","2020"};
|
||||
// var tables = new []{"01","02","03","04","05","06","07","08"};
|
||||
// var queryTime = new DateTime(2021, 7, 2);
|
||||
// var queryTime1 = new DateTime(2022, 3, 2);
|
||||
// var queryables=new List<IQueryable<TestTimeShardingEntity>>()
|
||||
// {
|
||||
// new List<TestTimeShardingEntity>().AsQueryable().Where(o=>o.Time>=queryTime&&o.Time<=queryTime1),
|
||||
// new List<TestTimeShardingEntity>().AsQueryable().Where(o=>o.Time<=queryTime1&&o.Time>=queryTime)
|
||||
// };
|
||||
// TestForDataSource(queryables,dataSources);
|
||||
// TestForTable(queryables,tables);
|
||||
// }
|
||||
// }
|
||||
// public class TestTimeShardingEntity
|
||||
// {
|
||||
// public string Id { get; set; }
|
||||
// public DateTime Time { get; set; }
|
||||
// }
|
||||
// }
|
Loading…
Reference in New Issue