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 模拟调用同一类的另一个静态方法的静态方法_Java_Unit Testing_Mocking_Powermock - Fatal编程技术网

Java 模拟调用同一类的另一个静态方法的静态方法

Java 模拟调用同一类的另一个静态方法的静态方法,java,unit-testing,mocking,powermock,Java,Unit Testing,Mocking,Powermock,我必须为一个静态方法编写一个单元测试,它需要模拟同一类的另一个静态方法。 示例代码: public class A { public static boolean foo(){} public static boolean bar(){ return foo(); } } @PrepareForTest({A.class}) public ATest{ testMethod(){ mockStatic(A.class); whe

我必须为一个静态方法编写一个单元测试,它需要模拟同一类的另一个静态方法。 示例代码:

public class A {
   public static boolean foo(){}
   public static boolean bar(){
       return foo();
   }
}

@PrepareForTest({A.class})
public ATest{
   testMethod(){
       mockStatic(A.class);
       when(A.foo()).thenReturn(true);
       assertTrue(A.bar());
   }
}

我一直试图对bar方法进行单元测试,但迄今为止没有成功

问题:调试未到达
返回foo()语句和断言失败。请给我一些建议。此时我无法修改代码


如果您能帮助我们模仿foo方法,我们将不胜感激。谢谢

事实上,
false
boolean
的默认值,这是一个坏把戏。您希望调用错误的
foo
,而实际上没有调用
bar
。长话短说:

when(A.bar()).thenCallRealMethod();

在这种情况下,您不应该在类上创建模拟,而应该在类
a
中的特定方法(
foo()
)上使用
stub

public static <T> MethodStubStrategy<T> stub(Method method)

你到底有什么问题呢?即使你可以模拟静态方法,这也从根本上表明你的代码设计得很糟糕。为测试而设计代码,而不是相反。@user3707125 Debug未到达返回foo();代码和断言中的语句失败。请给我一些建议。此时我无法修改代码,还记得foo()参数,比如
A.class,“foo”,int.class
PowerMockito.stub(PowerMockito.method(A.class, "foo")).toReturn(true);