【问题标题】:Implement Internal Interface in Tests在测试中实现内部接口
【发布时间】:2020-02-17 02:40:59
【问题描述】:

我已通过以下方式使 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()' 不能实现接口成员,因为它不是公共的。 [MyProject.Tests]

看来InternalsVisibleToAttribute 只适用于类和函数。

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

我之所以这么问,是因为我想让尽可能多的东西只有我的项目及其测试才能访问。

【问题讨论】:

  • 您是否尝试过在模拟公众中制作Function1
  • @Nkosi 谢谢!这条评论的最初版本对我来说不是很清楚,所以我并没有真正理解它。当我找到编辑后的版本时,我已经想通了。非常感谢您的帮助!

标签: c# testing interface mocking internals


【解决方案1】:

我刚刚想通了。结果我需要做的就是自己实现public

mock 类本身可以留internal:

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

【讨论】:

    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    相关资源
    最近更新 更多