У меня есть боль, чтобы понять, как тестировать блок с помощью EF в конкретическом примере. вещь кажется наполовину объясненной повсюду.C# unit test entity framework
в моем реальном слове пример у меня есть класс с методом.
namespace Genkai_wpf
{
public class CustomClass
{
public UNITY_DB_PRODEntities12 Genkai_db = new UNITY_DB_PRODEntities12();
public static string[] probtpRegex;
public static string[] audiensRegex;
public static string OUDestructionProbtp;
public static string OUDestructionAudiens;
public void Init()
{
OUDestructionProbtp = Genkai_db.Config.First(x => x.Properties == "OUDestructionProbtp").Value;
OUDestructionAudiens = Genkai_db.Config.First(x => x.Properties == "OUDestructionAudiens").Value;
probtpRegex = Genkai_db.Config.First(x => x.Properties == "Regex_Probtp").Value.Split(',');
audiensRegex = Genkai_db.Config.First(x => x.Properties == "Regex_Audiens").Value.Split(',');
}
}
Этот код работает в коде и извлекает некоторое регулярное выражение, хранящееся в моей таблице конфигурации db.
, но в единицах измерения я не могу проверить этот метод ini cuz EF, со случайной ошибкой на всех моих разных попытках.
здесь Шанк кода в моем unitTest.cs
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
private TestContext testContextInstance;
CustomClass PROBTP = new CustomClass();
public UnitTest1()
{
PROBTP.Init();
}
}
}
я называю CustomClass.init()
METHODE от public class UnitTest1
и получить ошибку, когда он не может создать экземпляр моего EF.
для лучшего понимания попробуйте использовать мой код в ответ спасибо.
пс: я слышал moking/усилий/хранилище , но я не понимаю, и даже не знаю, что это действительно лучший Methode ...
ошибка в UniTest: UNITY_DB_PRODEntities12 является EF от основного проекта в UniTest имя Differente
<add name="UNITY_DB_PRODEntities1" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=M35824\MSQL32BIT;initial catalog=UNITY_DB_PROD;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework"" providerName="System.Data.EntityClient" />
Nom-дю-тест: UT_Domain ПолноеИмя де тест: UnitTestProject1.UnitTest1.UT_Domain Источник де тест: C: \ Users \ PB19150 \ Documents \ £ DOI-ДИТ-BIM \ Developpement \ DEV-C# \ Genkai_Client_32 \ UnitTestProject1 \ Un itTest1.cs: Ligne 48 Sortie дю тест: Échec Durée дю тест: 0:00:00
Сообщение от résultat невыполнима де Creer ипе экземпляра де-ла-Classe UnitTestProject1.UnitTest1. ERREUR: System.InvalidOperationException: La Chaîne де связь 'UNITY_DB_PRODEntities12' Эст introuvable данс ле Fichier де конфигурация де l'применение .. StackTrace де résultat:
à System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel() меню системы .Data.Entity.Internal.LazyInternalContext.InitializeContext() à System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (тип EntityType) à System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() à System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() à System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() à System.Linq.Queryable.First[TSource](IQueryable
1 источник, предикат Expression`1) à Genkai_wpf.CustomClass.Init() dans c: \ Users \ PB19150 \ Documents \ £ DOI-DIT-BIM \ Developpement \ DEV-C# \ Genkai_C lient_32 \ Genkai_wpf \ Control \ CustomClass.cs: ligne 26 à UnitTestProject1.UnitTest1..ctor() dans c: \ Users \ PB19150 \ Documents \ £ DOI-DIT-BIM \ Developmentpement \ DEV-C# \ Genkai_Client_32 \ UnitTestProject1 \ UnitTest1 .cs: ligne 27
Я стараюсь, чтобы дать обе линии связи с тем же именем, но получить другую ошибку.
Nom-дю-тест: UT_Domain ПолноеИмя де тест: UnitTestProject1.UnitTest1.UT_Domain тест Источник: C: \ Users \ PB19150 \ Documents \ £ DOI-ДИТ-BIM \ Разработка \ DEV-C# \ Genkai_Client_32 \ UnitTestProject1 \ UnitTest1.cs: линия 48 выходного тестирования: Failure Test Time: 0 00: 00
результат Сообщение
не создать экземпляр класса UnitTestProject1.UnitTest1. Ошибка: System.Data.Entity.Core.MetadataException: Указанная схема является недействительной. Ошибки: Model1.csdl (3,4): ошибка 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Autorisation. Model1.csdl (10,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Config. Model1.csdl (17,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.final_full_data. Model1.csdl (58,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.final_McAfee. Model1.csdl (71,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.final_probtp_user. Model1.csdl (83,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Real_Time_Update. Model1.csdl (89,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Stat_Transact. Model1.csdl (98,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Synchronized_crossdomain_AD. Model1.csdl (107,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Update_Status. Model1.csdl (114,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.DCAI_ET. Model1.csdl (124,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.debug_final. Model1.csdl (134,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.debug_FPAC. Model1.csdl (144,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.debug_McAfee. Model1.csdl (154,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.final_bmc_fpac. Model1.csdl (174,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Final_DCAI. Model1.csdl (188,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.FPAC_Debug. Model1.csdl (198,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Genkai_Delete. Model1.csdl (214,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Temporary_BASEIP. Model1.csdl (289,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Temporary_DCAI. Model1.csdl (303,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Temporary_full_data. Model1.csdl (554,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. уже определено имя типа «UNITY_DB_PRODModel.Check_Transact. Model1.csdl (563,4): Error 0019: Каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Record уже определен .. результат StackTrace:
к System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.LoadItems (IEnumerable 1 xmlReaders, IEnumerable
1 sourceFilePaths, SchemaDataModelOption dataModelOption, DbProviderManifest providerManifest, ItemCollection ItemCollection, булева throwOnError) меню System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.Init (IEnumerable 1 xmlReaders, IEnumerable
1, булева путей файлов throwOnError) меню System.Data .Entity.Core.Metadata.Edm.MetadataCache.LoadEdmItemCollection (загрузчик MetadataArtifactLoader) à System.Data.Entity.Core.Metadata.Edm.MetadataCache. <> c__DisplayClass5.b__0 (String к) à System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func
2 valueFactory) à System.Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace (String cacheKey, MetadataArtifactLoader artifactLoader) à системе. Data.Entity.Core.Metadata.Edm.MetadataCache.GetMetadataWorkspace (DbConnectionOptions effectiveConnectionOptions) à System.Data.Entity.Core.EntityClient.EntityConnection.GetMetadataWorkspace() à System.Data.Entity.Core.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection () à System.Data.Entity.Core.Objects.ObjectContext..ctor (соединение EntityConnection, Boolean isConnectionConstructor, ObjectQueryExecutionPlanFactory objectQueryExecutionPlanFactory, переводчик-переводчик, ColumnMapFactory c olumnMapFactory) à System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel() à System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() à System.Data.Entity.Internal.LazyInternalContext.InitializeContext() меню системы .Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType (тип EntityType) меню System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() à System.Data.Entity.Internal.Linq.InternalSet
1.get_InternalContext() меню System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() à System.Linq.Queryable.First[TSource](IQueryable
1 источник, Expression` 1 предикат) à Genkai_wpf.CustomClass.Init() dans c: \ Users \ PB19150 \ Documents \ £ DOI-DIT-BIM \ Developmentpement \ DEV-C# \ Genkai_Client_32 \ Genkai_wpf \ Control \ CustomClass.cs: ligne 26 à UnitTes tProject1.UnitTest1..ctor() данс C: \ Users \ PB19150 \ Documents \ £ DOI-ДИТ-BIM \ Developpement \ DEV-C# \ Genkai_Client_32 \ UnitTestProject1 \ UnitTest1.cs: Ligne 27
как Conection строка в обоих проектах находятся в app.config. первая ошибка говорит, что не может найти экземпляр UNITY_DB_PRODEntities12, который делает его с момента его первого проекта. в unittest name отличается от UNITY_DB_PRODEntities1 не 12 Вторая ошибка, когда я пытаюсь дать такое же имя, говорит, что вся моя таблица дублируется.
Я уже добавил, но его экземпляр * EF другого проекта, который был отправлен – Zwan
, можешь добавить ошибку здесь? –
, если я даю одноименную строку связи EF на обоих проектах, изменение ошибки и я получаю конфликт так – Zwan