Java 如何使用powermock模拟硬编码对象。PowerMockito.whenNew(<;someClass>;.class)。然后return(<;something>;)不起作用
我正在测试一个名为class.java的类。这个类创建了一个类AddClass.java的新实例,并使用这个实例调用AddClass.java中的函数“add”。我想模拟这个函数“add”的行为,我使用了powermock,我模拟了实例变量的创建,但仍然没有使用这个模拟 这是密码 AddClass.javaJava 如何使用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
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失踪了