В моем реальном примере Word у меня есть класс с методом.
Код: Выделить всё
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(',');
}
}
но в unittest я не могу протестировать этот ini-метод, потому что EF отказывается со случайной ошибкой во всех моих разных попытках.
здесь кусок кода в моем unitTest.cs
Код: Выделить всё
namespace UnitTestProject1
{
[TestClass]
public class UnitTest1
{
private TestContext testContextInstance;
CustomClass PROBTP = new CustomClass();
public UnitTest1()
{
PROBTP.Init();
}
}
}
для лучшего понимания попробуйте использовать мой код в ответ, спасибо.
p.s.: Я слышал о насмешках/усилиях/репозиториях
, но я не понимаю и даже не знаю, что действительно лучше метод...
ошибка в unitest: UNITY_DB_PRODEntities12 — это EF из основного проекта
в имени unitest отличается
Код: Выделить всё
Полное имя теста: UnitTestProject1.UnitTest1.UT_Domain
Источник теста: c:\Users\PB19150\Documents\£DOI-DIT-BIM\Development\DEV-C#\Genkai_Client_32\UnitTestProject1\UnitTest1.cs: строка 48
Вывод теста: сбой
Продолжительность теста: 0:00:00
Сообщение о результате: невозможно создать экземпляр класса UnitTestProject1.UnitTest1. Ошибка: System.InvalidOperationException: строка подключения «UNITY_DB_PRODEntities12» не найдена в файле конфигурации приложения.
Результат StackTrace:
to System.Data.Entity.Internal.LazyInternalConnection.get_ConnectionHasModel()
to System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
to System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(TypeentityType)
в System.Data.Entity.Internal.Linq.InternalSet
Код: Выделить всё
1.Initialize() à System.Data.Entity.Internal.Linq.InternalSetв System.Data.Entity.Infrastructure.DbQuery
Код: Выделить всё
1.System.Linq.IQueryable.get_Provider() à System.Linq.Queryable.First[TSource](IQueryableв Genkai_wpf.CustomClass.Init() в c:\Users\PB19150\Documents\£DOI-DIT-BIM\Development\DEV-C#\Genkai_Client_32\Genkai_wpf\Control\CustomClass.cs:line 26
at UnitTestProject1.UnitTest1..ctor() в c:\Users\PB19150\Documents\£DOI-DIT-BIM\Developpement\DEV-C#\Genkai_Client_32\UnitTestProject1\UnitTest1.cs:line 27
Я пытаюсь дать обеим строкам подключения одно и то же имя, но получаю другое ошибка.
Имя теста: UT_Domain
Полное имя теста: UnitTestProject1.UnitTest1.UT_Domain
Источник теста: c:\Users\PB19150\Documents\£DOI-DIT-BIM\Developpement\DEV-C#\Genkai_Client_32\UnitTestProject1\UnitTest1.cs: строка 48
Вывод теста: Не удалось
Продолжительность теста: 0:00:00
Сообщение о результате:
Невозможно создайте экземпляр класса UnitTestProject1.UnitTest1. Ошибка: System.Data.Entity.Core.MetadataException: указанная схема недействительна. Ошибки:
Model1.csdl(3,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Authorization» уже определено.
Model1.csdl(10,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Config» уже определено.
Model1.csdl(17,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.final_full_data» уже определено.
Model1.csdl(58,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.final_McAfee» уже определено.
Model1.csdl(71,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.final_probtp_user» уже определено.
Model1.csdl(83,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Real_Time_Update» уже определено.
Model1.csdl(89,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Stat_Transact» уже определено.
Model1.csdl(98,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Synchronized_crossdomain_AD» уже определено.
Model1.csdl(107,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Update_Status» уже определено.
Model1.csdl(114,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.DCAI_ET» уже определено.
Model1.csdl(124,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.debug_final» уже определено.
Model1.csdl(134,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.debug_FPAC» уже определено.
Model1.csdl(144,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.debug_McAfee» уже определено.
Model1.csdl(154,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.final_bmc_fpac» уже определено.
Model1.csdl(174,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Final_DCAI» уже определено.
Model1.csdl(188,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.FPAC_Debug» уже определено.
Model1.csdl(198,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Genkai_Delete» уже определено.
Model1.csdl(214,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Temporary_BASEIP» уже определено.
Model1.csdl(289,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Temporary_DCAI» уже определено.
Model1.csdl(303,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Temporary_full_data» уже определено.
Model1.csdl(554,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Check_Transact» уже определено.
Model1.csdl(563,4): ошибка 0019: каждое имя типа в схеме должно быть уникальным. Имя типа «UNITY_DB_PRODModel.Record» уже определено.
Результат StackTrace:
to System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.LoadItems(IEnumerable
Код: Выделить всё
1 xmlReaders, IEnumerableà System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.Init(IEnumerable
Код: Выделить всё
1 xmlReaders, IEnumerableà System.Data.Entity.Core.Metadata.Edm.MetadataCache.LoadEdmItemCollection(загрузчик MetadataArtifactLoader)
à System.Data.Entity.Core.Metadata.Edm.MetadataCache.c__DisplayClass5.b__0(String k)
à System.Collections.Concurrent.ConcurrentDictionary
Код: Выделить всё
2.GetOrAdd(TKey key, Func!!! />à 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 columnsMapFactory)
à System.Data.Entity.Internal.InternalConnection.CreateObjectContextFromConnectionModel()
à System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
à System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
à System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(TypeentityType)
à System.Data.Entity.Internal.Linq.InternalSet1.Initialize() à System.Data.Entity.Internal.Linq.InternalSetв System.Data.Entity.Infrastructure.DbQuery
Код: Выделить всё
1.System.Linq.IQueryable.get_Provider() à System.Linq.Queryable.First[TSource](IQueryableGenkai_wpf.CustomClass.Init() в c:\Users\PB19150\Documents\£DOI-DIT-BIM\Developpement\DEV-C#\Genkai_Client_32\Genkai_wpf\Control\CustomClass.cs:ligne 26
à UnitTestProject1.UnitTest1..ctor() в c:\Users\PB19150\Documents\£DOI-DIT-BIM\Developpement\DEV-C#\Genkai_Client_32\UnitTestProject1\UnitTest1.cs:ligne 27
обе строки подключения в обоих проектах находятся в app.config.
Первая ошибка говорит о том, что не удается найти экземпляр UNITY_DB_PRODEntities12, что имеет смысл, поскольку он находится в первом проекте. в имени unittest отличается UNITY_DB_PRODEntities1, а не 12. Вторая ошибка, когда я пытаюсь дать то же имя, говорит, что все мои таблицы дублируются.
Подробнее здесь: https://stackoverflow.com/questions/329 ... -framework
Мобильная версия