单元测试在内部使用对象实例的方法

时间:2017-05-22 11:07:29

标签: java unit-testing junit mockito powermock

在为B类编写单元测试时,我该如何测试该方法 - > checkValidity()。该方法在内部初始化类C实例并调用该对象上的方法。

我们如何查看Mockito / Powermock

public class B {

 public List<Object> checkValidity(){

   C c=new C();

   if(c.isTrue()){
    .....
   }

   switch(c.getVal()){

       case 1: ...
       case 2: ..
       default : ...

   }



 }

 return list;

}

class C {

  public boolean isTrue(){
    ....
  }


  public int getVal(){
    ....
  }

}

此致

2 个答案:

答案 0 :(得分:1)

你应该提供类C的实例作为类B的构造函数的参数。这样你就可以将该类的模拟实例传递给类B并验证实例上的方法是否被调用并在需要时模拟其结果。

public class B {

private final C c;
public B(C c){
    this.c = c;
}

public List<Object> checkValidity(){

   if(c.isTrue()){

   }

  switch(c.getVal()){

   case 1: ...
   case 2: ..
   default : ...

  }

  return list;
}

class C {

  public boolean isTrue(){ }

  public int getVal(){}

}

现在你可以用mockito模拟C的实例。

答案 1 :(得分:1)

您可以做的是将对象C的创建外部化为package-private方法,而不是:

C c = new C();

您可以使用:

C c = createC();

之后你应该可以使用mockito Spy并通过一些模拟覆盖返回的参数。像

这样的东西

doReturn(mockedCObject).when(objectUnderTest.createC());