Реализовать внутренний интерфейс в тестах - PullRequest
0 голосов
/ 17 февраля 2020

Я сделал internal классы и функции видимыми для моего тестового проекта с помощью:

<ItemGroup>
  <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
    <_Parameter1>MyProject.Tests</_Parameter1>
  </AssemblyAttribute>
</ItemGroup>

Это работает нормально, но сейчас я пытаюсь реализовать следующий интерфейс internal в моих тестах на имитацию цели:

internal interface IRepository
{
    void Function1();        
}    

В своем тестовом коде я реализовал вышеуказанный интерфейс следующим образом:

internal class MockRepository : IRepository
{
    internal void Function1()
    {
        // Do something.
    }        
}

Однако я получаю следующую ошибку:

'MockRepository' не реализует элемент интерфейса 'IRepository.Function1 ()'. MockRepository.Function1 () не может реализовать элемент интерфейса, потому что он не опубликован c. [MyProject.Tests]

Кажется, что InternalsVisibleToAttribute относится только к классам и функциям.

Действительно ли мне нужно сделать мой интерфейс internal опубликованным c, чтобы тесты это макет, или есть способ сохранить это internal?

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

1 Ответ

1 голос
/ 17 февраля 2020

Я только что понял это. Оказывается, все, что мне нужно было сделать, это сделать саму реализацию public.

Сам класс-макет может остаться internal:

internal class MockRepository : IRepository
{
    public void Function1()
    {
        // Do something.
    }        
}
...