如何使用 PowerMock 模拟硬编码对象。PowerMockito.whenNew(.class)<someClass>.thenreturn(<something>) 不



我正在尝试测试一个类 CallingClass.java。此类创建类 AddClass 的新实例.java并使用此实例调用 AddClass.java 中存在的函数"add"。我想模拟这个函数"add"的行为,我使用了 PowerMock,我嘲笑了实例变量的创建,但仍然没有使用这个模拟。

这是代码

添加类.java

package com.samples;
public class AddClass {
    public int add(int a,int b)
    {
        int c;
        c=a+b;
        return c;
    }
}

呼叫类.java

package com.samples;
public class CallingClass {
    public int Calling_function(int a,int b)
    {
        int x;
        AddClass adding=new AddClass();
        x=adding.add(a, b);
        return x;
    }
}

调用类测试.java//这是测试类

package com.samples;
import static org.junit.Assert.*;
import org.junit.Test;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;

public class CallingClassTest {
    @Test
    public void testCalling_function() {
        int actual;
        int a=5;
        int b=4;
        AddClass aobj=Mockito.mock(AddClass.class);
        PowerMockito.when(aobj.add(a, b)).thenreturn(10);
        PowerMockito.whenNew(AddClass.class).thenreturn(aobj);
        CallingClass c=new CallingClass();
        actual=c.Calling_function(a, b);
        assertEquals(10,actual);
        }
}

有人可以告诉我应该如何模拟 AddClass 中存在的函数"add"的行为吗.java

试试这个,

public class CallingClass {
   private AddClass addClass;
   public CallingClass(){
     this.addClass = addClass;
   }
   public int Calling_function(int a,int b){
     //int x;
     //x=addClass.add(a, b);
     //return x;
     //inline above three lines
     return addClass.add(a,b);
   }
}

在你的测试课上,你可以简单地做,

public class CallingClassTest {
  private CallingClass callingClass;
  private AddClass addClass;
  @Before
  public void setUp(){
   addClass = Mockito.mock(AddClass.class);
   callingClass = new CallingClass(addClass);
 }
  @Test
  public void testCalling_function() {
     int actual;
     int a=5;
     int b=4;
     Mockito.when(addClass.add(a, b)).thenreturn(10);
     actual=callingClass.Calling_function(a, b);
     assertEquals(10,actual);
    }
}

您应该考虑重命名变量和方法:

  • 描述性变量名称
  • 方法名称应以动词开头,首字母应为小写

我认为您在测试类中缺少一些注释。

请尝试以下操作:

@RunWith(PowerMockRunner.class)
@PrepareForTest({CallingClass.class, AddClass.class})
public class CallingClassTest {
    ...

有了这些注释,我认为您的单元测试应该运行良好。

相关内容

  • 没有找到相关文章

最新更新