我为之编写的测试用例:
public class AClassUnderTest {
// This test class has a method call
public Long methodUnderTest() {
// Uses the FinalUtilityClass which contains static final method
FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>);
// I want to mock above call so that test case for my "methodUnderTest" passes
}
}
我还有最后一节课。
public final class FinalUtilityClass {
/**
* Method has 3 parameters
*/
public static final MyBean myStaticFinalMethod(<3-parameters-here>) {
}
}
我已经在测试类中添加了以下代码:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ FinalUtilityClass.class })
PowerMockito.mock(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());
PowerMockito.mockStatic(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());
PowerMockito.spy(FinalUtilityClass.class)
PowerMockito.when(FinalUtilityClass.myStaticFinalMethod(<3-parameters-here>).thenReturn(new MyBean());
但对我来说什么都不起作用。请建议在final
类中模仿static final
方法的正确方法。
模拟对静态方法的调用需要执行以下步骤:
@runwith(powermockrunner.class)
注释。@preparefortest(classthatcontainsstaticmethod.class)
注释PowerMock.mockStatic(ClassThatContainsStaticMethod.class)
模拟该类的所有方法当您按照文档中的步骤执行这些步骤时,您的测试应该可以工作了。正如OP似乎对PowerMock和PowerMockito感到困惑--这(或多或少)是同样的事情:
package ghostcat.test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
final class ClassWithStatic {
public final static int ignoreMethodCall(String a, String b, int c) {
System.out.println("SHOULD NOT SHOW UP: " + a);
return c;
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassWithStatic.class)
public class MockStaticTest {
@Test
public void test() {
PowerMockito.mockStatic(ClassWithStatic.class);
PowerMockito.when(ClassWithStatic.ignoreMethodCall("a", "b", 5)).thenReturn(42);
org.junit.Assert.assertEquals(ClassWithStatic.ignoreMethodCall("a", "b", 5), 42);
}
}
我的问题与这个问题基本相同,但这也适用于函数吗? 我想明白: 编译器是否将类中的所有函数视为? 在类中的函数中添加关键字是否有任何影响?
Java不允许类的静态方法被重写。因此,如果一个超类方法是静态的,那么子类中的同名方法也需要是静态的,具有相同的签名才能编译,尽管它不是一个方法重写。下面是一个例子: 但我的问题是,所以如果这不是方法重写,那么为什么我不能使超级类中的静态方法final?
我用的是同一种概念,我在第一节课上用过 但当我运行类Test2时,它给出了输出5。 我想知道初始化是什么时候发生的?我知道静态变量在编译时获得值。但是静态决赛呢?这个变量什么时候得到它的值?
final:类似于C++中的const参数。这基本上意味着值(或方法中返回的值)不会改变。 静态:表示值(或方法)不直接赋给某个对象--因此您可以在其他类中使用静态变量(或方法),而无需创建对象 final static:这种组合是否意味着您有变量(或方法),您可以在不创建对象(static)的情况下访问它,并且您不能更改它的值(就像在C++常量中)(final) 如果我是对的,比我没有得到一件事
问题内容: 在Java中,两者之间有什么区别? 和 都是和,不同之处在于属性。 有什么更好的?又为什么呢? 问题答案: 通常,是指“与类型本身相关联,而不是与类型实例相关联”。 这意味着你可以在没有创建类型实例的情况下引用静态变量,并且任何引用该变量的代码都引用完全相同的数据。将其与实例变量进行比较:在这种情况下,该类的每个实例都有一个独立的变量版本。因此,例如: 打印出并且是分开的,因为x和y引
要通过这个测试,必须做的绝对最小的嘲笑是什么? 代码: 测试: 相关:在测试类中模拟私有静态最终变量(没有明确答案)