不调用java模拟函数,而是使用实函数

t8e9dugd  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(435)

我开始学习嘲笑。我想当考试被叫来时(只为学习目的)考试会失败。
数学类:

public class MathUtils {

  public int addWithHelper(int a, int b) {
        MathUtilsHelper mathUtilsHelper = new MathUtilsHelper();
        return mathUtilsHelper.addNumbers(a,b);
    }
}

我的数学助手:

public class MathUtilsHelper {

     int addNumbers(int a, int b) {
         return a + b;
     }
}

类数学测试

@Test
void itShouldAddNumberFromHelper() {

     MathUtilsHelper mathUtilsHelperMocked = Mockito.mock(MathUtilsHelper.class);
     when(mathUtilsHelperMocked.addNumbers(5,3)).thenReturn(999); // this doesn't works !!!!!!

     int add = mathUtils.add(5, 3);
     assertEquals(8, add); // should throw error

}

谢谢你的帮助!

goucqfw6

goucqfw61#

mathutils中没有模拟对象,请对mathutils类执行以下操作:

public class MathUtils {
  public MathUtilsHelper mathUtilsHelper;

  public MathUtils(MathUtilsHelper mathUtilsHelper ){
     this.mathUtilsHelper=mathUtilsHelper;
  }

  public int addWithHelper(int a, int b) {
     return mathUtilsHelper.addNumbers(a,b);
  }
}

在初始化测试时,请尝试以下操作:

@Test
void itShouldAddNumberFromHelper() {

   MathUtilsHelper mathUtilsHelperMocked = Mockito.mock(MathUtilsHelper.class);
   when(mathUtilsHelperMocked.addNumbers(5,3)).thenReturn(999);
   mathUtils= new MathUtils(mathUtilsHelperMocked);

   int add = mathUtils.addWithHelper(5, 3);
   assertEquals(8, add);

}
pinkon5k

pinkon5k2#

您的util类每次都在创建一个新的助手示例,因此永远不会使用mock。
老实说,我不知道为什么需要util类,但是如果您想让它更易于测试,请更改它,以便将助手的示例传递到构造函数中,而不是在util类中示例化它。换句话说,依赖注入。
这样就可以创建mock,并通过传入mock来创建util类的示例。

相关问题