在测试中实现内部接口

Implement Internal Interface in Tests

我通过以下方式使 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' does not implement interface member 'IRepository.Function1()'. 'MockRepository.Function1()' cannot implement an interface member because it is not public. [MyProject.Tests]

好像InternalsVisibleToAttribute只适用于类和函数

我真的必须让我的 internal 接口 public 让测试模拟它,还是有办法保留它 internal

我问是因为我想尽可能多地保留只有我的项目及其测试可以访问的内容。

我刚刚弄明白了。原来我需要做的就是让实现本身 public.

模拟 class 本身可以保留 internal:

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