为受保护的类编写Mockito测试用例

问题描述

我正在处理一个Java大项目,并且是Java的新手。我的任务是为某些代码正确的模拟单元测试。我已经了解了Mockito和Junit的基础知识,但是该项目相当大,我编写的代码对我不起作用。这是类结构

文件位于ProjectName / src / com.package.packageName / ada /


// Car.java
public class Car{

    private xyzClient xyzclient;
    private Map<Long,Make> MPR; // Make is some legacy class
    private static ConcurrentMap <Long,xyzClient> CMP = new ConcurrentHashMap<>();
    public Car(final Map<Long,Make> MPR,final xyzClient xyzclient){
        this.MPR = MPR
        this.xyzclient = xyzclient
    }

    @Visible for testing
    protected XYZ getClient (final long identification){
        CMP.computeIFAbsent(identification,(id)->{
            final Make make;

            if MPR.containsKey(id){
                make = MPR.get(id)
            }
            else{
                make = AllConstants.allMap.get(ABC.getRegions().getyear())
                //AllConstants is java file in constants folder which contains allMap hasmap which takes input from ABC.getRegions.getyear()
            }

            final XYZ ans = xyzclient.getInfo("fixedString",make)
            return ans

        });

        return CMP.get(identification)

    }
}

现在我的目标是为上述程序编写模拟测试用例。我尝试了以下几项。

public class CarTest{

    private static final long identifcation = 1;
    private static final String foo = 'foo'

    @InjectedMocks
    private Car car;
    @Mock
    private Map<Long,Make> MRP;
    @Mock 
    Make make;
    @Mock 
    xyzClient xyzclient;
    @Mock;
    XYZ xyz;

    public void setUp() throws Exception {
        MRP = new HashMap<>();
        MRP.put(identification,new Make(foo))
        MockitoAnnotations.initMocks(this)
        car = new car(MRP,xyzClient)
    }

    public void testgetClient(){

        when(MRP.containsKey(eq(identification))).thenReturn(true); //so that if branch is executed
        doReturn(xyz).when(xyzClient.getInfo("someString",new Make('foo')))
        car.getClient(1);
    }
}

我的主要目的是测试程序,以便同时覆盖if和else的分支。那我该怎么办呢?另外,我该如何模拟包含allMap的Allcontants类,在此我将不胜感激,因为自上个星期以来我一直在努力解决这一问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)