Платформа для модульного тестирования C#C#

Место общения программистов C#
Ответить
Anonymous
 Платформа для модульного тестирования C#

Сообщение Anonymous »

Мне сложно понять, как проводить модульное тестирование с помощью EF на конкретном примере. Кажется, что везде все наполовину объяснено.
В моем реальном примере 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();
}
}
}
Я вызываю метод CustomClass.init() из публичного класса UnitTest1 и получаю ошибку, из-за которой он не может создать экземпляр моего EF.
для лучшего понимания попробуйте использовать мой код в ответ, спасибо.
p.s.: Я слышал о насмешках/усилиях/репозиториях
, но я не понимаю и даже не знаю, что действительно лучше метод...
ошибка в unitest: UNITY_DB_PRODEntities12 — это EF из основного проекта
в имени unitest отличается Имя теста: UT_Domain
Полное имя теста: 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
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() в 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
1 sourceFilePaths, SchemaDataModelOption dataModelOption, DbProviderManifestProviderManifest, ItemCollection itemCollection, Boolean throwOnError)
à System.Data.Entity.Core.Metadata.Edm.EdmItemCollection.Init(IEnumerable

Код: Выделить всё

1 xmlReaders, IEnumerable
1 filePaths, Boolean throwOnError)
à 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
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() в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»