如何为其中调用了其他私有方法的私有无效方法编写单元测试?

时间:2019-03-04 18:47:15

标签: java junit

private void ConvertString(ABC object) 
{
    String head = "";
    String tail="string_tail";
    if(!tail.isEmpty()) 
    {
        String converter = new StringConvert();
        head = converter.convert(tail, TYPE1);
        setHeadToTail(head,object);
    }
}

private void setHeadToTail(String head, ABC object) 
{
    List<Mixture> values=object.getValues();
    if (values!=null) 
    {
        for (Mixture Values1 : values) 
        {
            if (Values1 instanceof NumMixture) 
            {
                ((NumMixture) Values1 ).setTail(head);
            }
        }
     }

}

我想为ConvertString方法编写单元测试,以检查天气转换后的值“ head”等于在setHeadToTail()中传递的值“ head”。 有人可以帮忙吗?

@测试 公共无效test_ConvertedValue()引发异常{

    ABC obj1=methodToSetSomeValues();
    Method method=Project.class.getDeclaredMethod("ConvertString", ABC.class);
    method.setAccessible(true);
    method.invoke(new Project(), obj1);
    String expectedVal= "1234";

    ArgumentCaptor<String> argumentCaptor=ArgumentCaptor.forClass(String.class);

    verifyPrivate(new Project()).invoke("setHeadToTail", argumentCaptor.capture(), obj1);
    assertEquals(expectedVal,argumentCaptor.getValue());


}

在此测试用例中,我要检查转换的“ head”的值是否等于在setHeadToTail()中传递的参数,即head,但这不起作用。

1 个答案:

答案 0 :(得分:1)

我刚开始时也有同样的问题。基本上,您可以将private方法看作只是代码,就好像它根本不在方法中一样。它只是为了使您的代码更具可读性或删除样板。因此,如果要测试功能,则需要测试调用它的方法。

public void someMethod() { // test this
    // some code
    privateMethod();
    // some more code
}

private void privateMethod() {
    // some code
}

在进行单元测试someMethod()时,就像privateMethod()的内容根本没有任何方法一样。

编辑:对于您而言,有多少个嵌套private方法并不重要,请测试调用它们的非私有方法,就好像它们是1个大代码块一样。