首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用InternalsVisibleTo测试私有成员

使用InternalsVisibleTo测试私有成员
EN

Stack Overflow用户
提问于 2014-11-12 20:36:21
回答 4查看 5K关注 0票数 3

我有以下代码,我正在尝试进行单元测试:

代码语言:javascript
复制
class ConfigFile
{

    private XmlDocument configData;

    public ConfigFile()
    {
        configData = new XmlDocument();
    }

    public void loadConfigFile(string filename) 
    {
    }
}

loadConfigFile方法是空的,因此我需要检查configData字段以验证其中的数据是否正确。为此,我尝试使用InternalsVisibleTo属性-我已经对单元测试DLL进行了签名,并生成了公钥,因此我现在拥有:

代码语言:javascript
复制
    [assembly: InternalsVisibleTo("ConfigTests, PublicKey=<PUBLICKEYVALUE>")]
    private XmlDocument configData;

单元测试仍然不想访问私有字段:

代码语言:javascript
复制
    [TestMethod()]
    public void LoadConfigFileTest()
    {
        ConfigFile target = new ConfigFile();
        string filename = @"Config.xml";
        target.loadConfigFile(filename);
        Assert.AreEqual("<config></config>",target.configData.OuterXml);  
    }

在Assert.AreEqual("",target.configData.OuterXml);行,我得到以下错误:

“ConfigTests.ConfigFile”不包含“configData”的定义,并且找不到接受类型为“ConfigTests.ConfigFile”的第一个参数的扩展方法“configData”(是否缺少using指令或程序集引用?)

我认为InternalsVisibleTo属性应该允许单元测试访问私有字段...还是我错过了什么?

EN

回答 4

Stack Overflow用户

发布于 2014-11-12 20:38:41

InternalsVisibleTo使您能够从另一个程序集访问内部成员(非私有)。

如果您想测试一个私有方法,那么您应该问问自己,该方法是否应该是私有的,或者该特定方法是否应该是可单独测试的。

票数 6
EN

Stack Overflow用户

发布于 2020-02-06 05:11:32

InternalsVisibleTo使所有internal子级对给定的程序集可见。

如果你想让一个private方法对另一个程序集可见,这本质上是一个悖论。这意味着打破OOD的基础。

单元测试应该是测试黑盒的公共接口。也就是说,您的类应该以这样的方式设计,即您只需要来测试它们的公共方法。

使你的方法不能被public.

  • If it be public,然后你可以使它protected internal,以便可以通过使用InternalsVisibleTo

  • Making来访问它。
  1. it protected internal会造成安全威胁,必须通过密封类和它的所有容器类或者通过标准的安全评估来解决。

如果这不起作用,那就不要测试它,因为这不是单元测试的问题。测试一个使用它的公共方法。

如果某件事是私人的,它的字面意思是(在每种编程或口语中)没有人关心它!

票数 2
EN

Stack Overflow用户

发布于 2014-11-12 21:24:42

我认为您的类ConfigFile具有其他用于读取配置值的公共属性/方法。因此,configData是私有的。在这种情况下,您可以对其应用黑盒测试(即对这些值而不是整个XmlDocument进行断言)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26887186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档