我有一个如下所示的代码: Class A { public boolean myMethod(someargs) { MyQueryClass query = new MyQueryClass(); Long id = query.getNextId(); // some more code } } Class MyQueryClass { …. public Long getNextId() { //lot of DB code, execute some DB query return id; } } 现在我正在写一个A.myMethod(someargs)的testing。 我想跳过真正的方法query.getNextId() ,而是返回一个存根值。 基本上,我想嘲笑MyQueryClass 。 所以在我的testing案例中,我使用了: MyQueryClass query = PowerMockito.mock(MyQueryClass.class); PowerMockito.whenNew(MyQueryClass.class).withNoArguments().thenReturn(query); when(query.getNextId()).thenReturn(1000000L); […]
我的项目中有一些静态的util方法,其中一些只是传递或抛出exception。 这里有很多关于如何模拟一个返回types不是void的静态方法的例子。 但是,我怎样才能嘲笑一个静态方法返回无效只是“ doNothing() ”? 非void版本使用这些代码行: @PrepareForTest(StaticResource.class) … PowerMockito.mockStatic(StaticResource.class); … Mockito.when(StaticResource.getResource("string")).thenReturn("string"); 但是,如果应用于返回void的StaticResources ,则编译将会抱怨when(T)不适用于void … 有任何想法吗? 一个解决方法可能只是让所有静态方法返回一些Boolean成功,但我不喜欢解决方法。
我有一个基于Gradle的Java项目,现在我想用PowerMock来模拟私有方法。 问题是,我无法使用PowerMockRunner,因为当我添加@RunWith(org.powermock.modules.junit4.PowerMockRunner.class)注释时,我总是得到以下exception。 错误: org.powermock.reflect.exceptions.FieldNotFoundException: Field 'fTestClass' was not found in class org.junit.internal.runners.MethodValidator. at org.powermock.reflect.internal.WhiteboxImpl.getInternalState(WhiteboxImpl.java:581) at org.powermock.reflect.Whitebox.getInternalState(Whitebox.java:308) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate TestMethods(PowerMockJUnit4MethodValidator.java:79) at org.powermock.modules.junit4.internal.impl.testcaseworkaround.PowerMockJUnit4MethodValidator.validate InstanceMethods(PowerMockJUnit4MethodValidator.java:49) at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:51) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.validate(PowerMockJUnit44RunnerDelegateImpl.java:108) … 这是我的testing依赖关系: testCompile 'junit:junit:4.+', 'org.powermock:powermock-core:1.5.6', 'org.powermock:powermock-module-junit4:1.5.6', 'org.powermock:powermock-api-mockito:1.5.6' testing本身在完全空的时候也会失败(初始化错误): @RunWith(PowerMockRunner.class) public class SomeTest { @Test public void testSomething() { } } 任何想法可能是错的? 使用PowerMock的其他testing工作正常(他们都没有使用PowerMockRunner)。 问候和感谢任何帮助! 本
我有一个课程,我想用一个公开的方法来testing私人课程。 我想假设私人方法正常工作。 举个例子,我doReturn….when… 我发现有可能使用PowerMock的解决scheme ,但这种解决scheme不适合我。 它是如何完成的? 有没有人有这个问题?
我很难find一种方法来设置一个类的静态字段。 基本上是这样的: public class Foo{ // … private static B b = null; } B是另一类。 除了setInternalStateFromContext()之外,还有什么办法可以在PowerMock中做到这一点吗? 使用上下文类方法似乎有点矫枉过正设置一个领域。 谢谢。
我有一个类如下: public class A { public A(String test) { bla bla bla } public String check() { bla bla bla } } 构造函数A(String test)和check()中的逻辑是我试图模拟的东西。 我想要任何电话,如: new A($$$any string$$$).check()返回一个虚拟的string“testing”。 我试过了: A a = mock(A.class); when(a.check()).thenReturn("test"); String test = a.check(); // to this point, everything works. test shows as "tests" whenNew(A.class).withArguments(Matchers.anyString()).thenReturn(rk); // also tried: //whenNew(A.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(rk); new A("random […]
我知道如何使用PowerMock从类中嘲讽静态方法。 但我想嘲笑使用JUnit和PowerMocktesting类中的多个类的静态方法。 谁能告诉我是否有可能做到这一点,如何做到这一点?
我有这样的代码片段: @RunWith(PowerMockRunner.class) @PrepareForTest({Thread.class}) public class AllMeasuresDataTest { @Before public void setUp() throws Exception { } @Test public void testGetMeasures() { AllMeasuresData measure = new AllMeasuresData(); assertEquals(measure.getMeasures(), null); HashMap<String, Measure> map = new HashMap<String, Measure>(); measure.setMeasures(map); assertEquals(measure.getMeasures(), map); measure.setMeasures(null); assertEquals(measure.getMeasures(), null); } @Test public void testAllMeasuresData() throws IOException { ClassLoader loader = PowerMockito.mock(ClassLoader.class); Thread threadMock = […]
我想从包含2个静态方法m1和m2的类中嘲讽静态方法m1。 我想方法m1返回一个对象。 我尝试了以下 1) PowerMockito.mockStatic(Static.class, new Answer<Long>() { @Override public Long answer(InvocationOnMock invocation) throws Throwable { return 1000l; } }); 这是调用m1和m2,它有不同的返回types,所以它给出了一个返回types不匹配的错误。 2) PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l); 但是当m1执行时不会调用它。 3) PowerMockito.mockPartial(Static.class, "m1"); 给出编译器错误,mockPartial不可用,我从http://code.google.com/p/powermock/wiki/MockitoUsage获得 。