我们大约有300个POCO对象,每个对象都从IEntity接口继承。在我们的服务层中,我们有一个IRepository和一个DbContext,其中为每个POCO类指定了所有EntityTypeConfigurations。
我们正在尝试对它们进行单元测试,以确保映射正确。有没有一种方法可以自动为程序集中的所有IEntity对象调用下面的helper方法。
internal static void TestRepositoryForEntity<T>(T obj) where T : class, IEntity
{
ILogger logger = new Logging.NLog.NLogLogger(null);
IConnectionProvider connectionProvider = new ConnectionProvider(logger);
IEntityRepository<T> testRepo = new BaseEntityRepository<T>(connectionProvider);
var allResults = testRepo.GetAll();
foreach (var item in allResults)
{
Console.WriteLine(item);
}
}
目前,我们这样称呼它:
Helpers.EntityContextHelper.TestRepositoryForEntity(new Zinc.Entities.User());
但是,如果我尝试获取所有IEntity对象并在帮助程序中的T类型上传递这些对象,则为IEntity,并且找不到正确类型的映射。
将对象的实例作为参数传递似乎有点奇怪;为什么不删除它,只打电话TestRespositoryForEntity<Zinc.Entities.User>()
。(如果类型是抽象的怎么办?)如果某个地方有程序集,则可以这样调用通用方法:
var assembly = typeof (User).Assembly;
var typeList = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract
&& typeof (IEntity).IsAssignableFrom(t));
MethodInfo testMethodInfo =
typeof (Helpers.EntityContextHelper)
.GetMethod("TestRepositoryForEntity").GetGenericMethodDefinition();
foreach (var type in typeList)
{
Console.WriteLine("Checking type {0}", type.FullName);
//we need an instance;
object instance = Activator.CreateInstance(type);
//create the correct generic method:
var testMethodToCall = testMethodInfo.MakeGenericMethod(type);
//invoke
testMethodToCall.Invoke(null, new [] { instance });
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句