Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用powermock模拟硬编码对象。PowerMockito.whenNew(<;someClass>;.class)。然后return(<;something>;)不起作用_Java_Unit Testing_Junit_Powermock - Fatal编程技术网

Java 如何使用powermock模拟硬编码对象。PowerMockito.whenNew(<;someClass>;.class)。然后return(<;something>;)不起作用

Java 如何使用powermock模拟硬编码对象。PowerMockito.whenNew(<;someClass>;.class)。然后return(<;something>;)不起作用,java,unit-testing,junit,powermock,Java,Unit Testing,Junit,Powermock,我正在测试一个名为class.java的类。这个类创建了一个类AddClass.java的新实例,并使用这个实例调用AddClass.java中的函数“add”。我想模拟这个函数“add”的行为,我使用了powermock,我模拟了实例变量的创建,但仍然没有使用这个模拟 这是密码 AddClass.java package com.samples; public class AddClass { public int add(int a,int b) { in

我正在测试一个名为class.java的类。这个类创建了一个类AddClass.java的新实例,并使用这个实例调用AddClass.java中的函数“add”。我想模拟这个函数“add”的行为,我使用了powermock,我模拟了实例变量的创建,但仍然没有使用这个模拟

这是密码

AddClass.java

package com.samples;

public class AddClass {

    public int add(int a,int b)
    {
        int c;
        c=a+b;
        return c;
    }

}
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;
    }

}
调用class.java

package com.samples;

public class AddClass {

    public int add(int a,int b)
    {
        int c;
        c=a+b;
        return c;
    }

}
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;
    }

}
CallingClassTest.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.java中函数“add”的行为吗

package com.samples;

public class AddClass {

    public int add(int a,int b)
    {
        int c;
        c=a+b;
        return c;
    }

}
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;
    }

}
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 {
          ...
      

      有了这些注释,我认为您的单元测试应该可以正常运行。

      这是否可以编译?您阅读了吗?乍一看,我会说一些跑步者和@PrepareForTest失踪了