【问题标题】:Unit test a class declared friend (internal)对声明为朋友的类进行单元测试(内部)
【发布时间】:2012-11-16 02:19:09
【问题描述】:

在我的一些测试助手代码中,我有一个名为 FakeDbSet(Of T)IDbSet(Of T) 实现,它在没有实际数据库的情况下模拟了许多 EF 行为。我将类声明为Friend,因为我想强制所有代码与它进行交互,就像IDbSet(Of T) 一样。在内部(即在我的Testing 程序集中),我访问了许多我希望能够测试的类的公共成员。

问题是,我将单元测试保存在单独的程序集中Test.Unit,这意味着他们无法访问我的内部实现!我知道我可以通过反思来解决这个问题,但这很快就会变得麻烦和混乱。有没有更好的方法来设置我的项目以避免这个问题?

【问题讨论】:

    标签: .net visual-studio-2010 unit-testing friend


    【解决方案1】:

    将此添加到您的 AssemblyInfo.cs 文件中:

    [assembly:InternalsVisibleTo("YourOtherAssembly")]
    

    这将使您的内部程序集对YourOtherAssembly 可见。但是,您应该真正考虑是否需要internal。编写测试时,请尝试关注您的 public 部分。

    在此处阅读更多信息:http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

    【讨论】:

    • 我是 .NET 单元测试的新手——但这里不是有内在的张力吗?一方面,我被鼓励为 Friend 范围做尽可能多的事情。降低能见度。另一方面,我不能为这些类创建任何单元测试,因为测试项目看不到那些 Friend 类。我很困惑。
    • @Prof.Falken 测试的重点应该放在模块的暴露行为上。
    • 没有异议——但我认为将一个类视为某种“模块”是很常见的。然而,internal 方法可以在共享同一个项目或其他任何项目的类之间使用。但是由于单元测试通常在同一个程序集中的另一个项目中,它们无法访问 internal 方法。这充其量感觉很尴尬。
    • @Prof.Falken,啊,我明白了。是的,绝对尴尬,因此我倾向于不使用internal。我认为一个类应该尽可能地保持私有,并且只公开需要公开的内容。如果有需要测试的“私有”算法,我实际上会将其提取到它自己的类中并将该算法公开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多