C# Proxy Generi c Параметр From Generi c Ввод - PullRequest
0 голосов
/ 29 апреля 2020

Я пишу несколько тестов, и часто мне приходится искать общие c параметры для явной передачи.

public class MyService : SecureService<RootEntity>
{
   //Intentionally omitted does not provide information related to question
}

public DepedencyReplaceScope<IContextProvider> CreateMockScope<TRootEntity>
{
    var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<TRootEntity> == new FakeContext<TRootEntity>())

    return new DependencyReplaceScope(mockCtx);
}

В настоящее время, когда я создаю макеты для своего теста, Я тоже go в службу и выяснил, что это root, чтобы передать. Тем не менее, было бы намного приятнее, если бы я мог создать область действия на основе службы.

например (псевдокод)

public DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<TService>
    where TService : SecureService<>
    define TRootEntity : TService<()>
{
    return CreateMockScope<TRootEntity>();
}

Это не сработает, так как я не думаю, есть способ определить прокси для Generi c. Есть ли способ создать эту область исключительно из TService (я не хочу использовать отражение непосредственно для ее построения, но я не против использования хака с moq, поскольку он абстрагирует отражение)

1 Ответ

1 голос
/ 30 апреля 2020

Лучшая вещь, которую я смог придумать, была:

public static class MockScopeProvider
{
    public static DepedencyReplaceScope<IContextProvider> CreateMockScopeFromService<U>(SecureService<U> dummy)
    {
         // your logic....
         var mockCtx = Mock.Of<IContextProvider>(x => x.WriteContext<U>() == new FakeContext<U>());

        return new DependencyReplaceScope(mockCtx);

    }
}

При таком использовании:

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