What steps will reproduce the problem?
1. this is the class that i`m testing:
public class Some {
public String some() {
return String.format("123", "456");
}
public JAXBContext getJAXBContext() throws JAXBException {
return JAXBContext.newInstance(Configuration.class);
}
}
2. this is my test class
@PrepareForTest({Some.class, JAXBContext.class})
//@RunWith(PowerMockRunner.class)
public class SomeTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
@Test
public void testSome() {
PowerMockito.mockStatic(String.class);
PowerMockito.when(String.format("123", "456")).thenReturn("789");
Some s = new Some();
String value = s.some();
Assert.assertEquals("789", value);
}
@Test
public void testJAXB() throws JAXBException {
PowerMockito.mockStatic(JAXBContext.class);
JAXBContext mock = PowerMockito.mock(JAXBContext.class);
PowerMockito.when(JAXBContext.newInstance(Configuration.class)).thenReturn(mock);
Some some = new Some();
JAXBContext context = some.getJAXBContext();
Assert.assertSame(mock, context);
}
}
3. using maven with the following dependencies:
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4-rule-agent</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>${powermock.version}</version>
<scope>test</scope>
</dependency>
with plugin configuration:
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-javaagent:${org.powermock:powermock-module-javaagent:jar}</argLine>
<useSystemClassloader>true</useSystemClassloader>
</configuration>
</plugin>
What is the expected output? What do you see instead?
getting the error from the test:
Tests in error:
testJ(com.att.tlv.ci.crawler.test.parser.SomeTest):
when() requires an argument which has to be 'a method call on a mock'.
For example:
when(mock.getArticles()).thenReturn(articles);
Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
It is a limitation of the mock engine.
What version of the product are you using? On what operating system?
<powermock.version>1.5.2</powermock.version>
java version "1.6.0_30"
Please provide any additional information below.
when i put PowerMockRunner (commented out in my example) it work fine.
only with the javaagent it fails..
Original issue reported on code.google.com by 88ch...@gmail.com on 14 Jan 2014 at 1:52
Original issue reported on code.google.com by
88ch...@gmail.com
on 14 Jan 2014 at 1:52