Как настроить EntryAssembly для тестов в. Net Core - PullRequest
3 голосов
/ 09 марта 2020

В настоящее время я выполняю миграцию проекта и его тестовых проектов из. Net Framework в. Net Core.

In. Net Framework, мы привыкли делать что-то подобное, чтобы установить EntryAssembly для тестов:

AppDomainManager manager = new AppDomainManager();
FieldInfo entryAssemblyfield = manager.GetType().GetField("m_entryAssembly", BindingFlags.Instance | BindingFlags.NonPublic);
entryAssemblyfield.SetValue(manager, assembly);

AppDomain domain = AppDomain.CurrentDomain;
FieldInfo domainManagerField = domain.GetType().GetField("_domainManager", BindingFlags.Instance | BindingFlags.NonPublic);
domainManagerField.SetValue(domain, manager);

Взят отсюда: https://dejanstojanovic.net/aspnet/2015/january/set-entry-assembly-in-unit-testing-methods/

Поскольку AppDomainManager недоступен в. Net Core больше, как мы можем сделать sh нечто подобное, чтобы Assembly.GetEntryAssembly(); возвращало то, что я хочу, вместо сборки проекта тестов.

1 Ответ

0 голосов
/ 10 марта 2020

Вот два возможных решения, которые я нашел:

1) Как предложено @ajz, вы можете создать интерфейс с методом GetEntryAssembly, который возвращает Assembly.GetEntryAssembly(), чтобы вы могли использовать Mock / Setup для возврата того, что вы хотите для ваши тесты.

2) Вы можете создать класс с помощью GetEntryAssembly Fun c следующим образом:

public static class AssemblyHelper
{
    public static Func<Assembly> GetEntryAssembly = () => Assembly.GetEntryAssembly();
}

В своем методе тестирования вы можете переопределить это поведение, переназначив встроенную функцию на это:

AssemblyHelper.GetEntryAssembly = () => assembly;

Мы пошли со вторым решением просто потому, что раньше вызывали Assembly.GetEntryAssembly() внутри конструктора stati c, и я не думаю, что в любом случае я могу насмехаться над объектом и устанавливать его в поле, прежде чем пройти через это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...