如何对私有方法进行单元测试?

510

我正在构建一个类库,其中包含一些公共和私有方法。我希望能够单元测试私有方法(主要是在开发过程中,但也可能对未来的重构有用)。

正确的操作方式是什么?


3
也许是我漏掉了什么,或者可能只是因为这个问题在互联网年代上已经过时了,但是现在对私有方法进行单元测试变得非常容易和直截了当,使用Visual Studio可以在需要时生成必要的访问器类,并将测试逻辑预填充为接近所需用于简单功能测试的代码段。请参阅例如http://msdn.microsoft.com/en-us/library/ms184807%28VS.90%29.aspx - mjv
5
这似乎是与 https://dev59.com/bHVD5IYBdhLWcg3wRpaX 相近的内容。 - Raedwald
6
不要对内部单元进行单元测试:http://blog.ploeh.dk/2015/09/22/unit-testing-internals - Mark Seemann
自 2012 年起,Visual Studio 已将私有访问器(Private Accessors)列为弃用项。 - Blaine DeLancey
显示剩余3条评论
32个回答

0

还要注意,InternalsVisibleToAtrribute 要求您的程序集是强命名的,如果您在之前没有这个要求的解决方案中工作,那么就会出现一些问题。我使用访问器来测试私有方法。请参见此问题以获取示例。


3
不,InternalsVisibleToAttribute不需要您的程序集具有强名称。我目前在一个不需要强名称的项目中使用它。 - Cody Gray
1
澄清一下:“当前程序集和友元程序集必须都是未签名的,或者都使用强名称进行签名。”- 来自 MSDN - Hari

-1

对于JAVA语言

在此,您可以使用模拟行为覆盖测试类的特定方法。

以下是代码:

public class ClassToTest 
{
    public void methodToTest()
    {
        Integer integerInstance = new Integer(0);
        boolean returnValue= methodToMock(integerInstance);
        if(returnValue)
        {
            System.out.println("methodToMock returned true");
        }
        else
        {
            System.out.println("methodToMock returned true");
        }
        System.out.println();
    }
    private boolean methodToMock(int value)
    {
        return true;
    }
}

测试类将是:

public class ClassToTestTest{

    @Test
    public void testMethodToTest(){

        new Mockup<ClassToTest>(){
            @Mock
            private boolean methodToMock(int value){
                return true;
            }
        };

        ....    

    }
}

1
这个问题被标记为 .net - 因此这不是一个答案,应该被删除。 - Wai Ha Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接