Tag: powermock

如何模拟DriverManager.getConnection(…)?

我有一个类,它连接到H2数据库并运行几个SQL语句。 public class H2Persistence implements IPersistence { private Connection conn; @Override public void open() { try { Class.forName(“org.h2.Driver”); conn = DriverManager.getConnection(CONN_TYPE_USER_HOME); final Statement stmt = conn.createStatement(); stmt.executeUpdate(“CREATE TABLE PERSON(” + “ID BIGINT,”+ “AGEGROUP VARCHAR(255),”+ “MONTHLY_INCOME_LEVEL VARCHAR(255),” + “GENDER VARCHAR(1),”+ “HOUSEHOLD_ID BIGINT)”); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } […]

如何模拟从抽象类inheritance的受保护子类方法?

如何使用Mockito或PowerMock来模拟由子类实现但从抽象超类inheritance的受保护方法? 换句话说,我想在模拟“doSomethingElse”时测试“doSomething”方法。 抽象超级 public abstract class TypeA { public void doSomething() { // Calls for subclass behavior doSomethingElse(); } protected abstract String doSomethingElse(); } 子类实现 public class TypeB extends TypeA { @Override protected String doSomethingElse() { return “this method needs to be mocked”; } } 解 这里给出的答案是正确的,如果涉及的类在同一个包中,它们将起作用。 但如果涉及不同的包,则可以选择使用PowerMock。 以下示例适用于我。 当然可能有其他方法可以做到这一点,这是有效的。 import static org.junit.Assert.assertEquals; import org.junit.Test; […]

我可以用Mockito / Powermock模拟一个超类的构造函数吗?

是否可以使用Mockito和可选的Powermock来模拟超类S ,以便对超类S任何调用(包括对S()构造函数的调用)都被模拟? 所以使用下面的例子,如果我使用MockS用MockS替换S , MockS对super()的调用是否会使用MockS中的构造MockS ? class S { S() { // Format user’s hard drive, call 911, and initiate self-destruct } } class T extends S { T() { super(); } } class Test { @Mock private S mockS; new T(); // T’s call to super() should call the mock, not the destructive S. […]

Powermock mockstatic不能inheritance最终类

我想嘲笑最后一堂课 PowerMockito.mockStatic(TestFinalClass.class); 当我运行单个junit并将javaagent添加到我的VM参数时,它正在从我的eclipse开始工作 -javaagent:{path}/powermock-module-javaagent-1.6.4.jar 但是当我尝试使用maven build命令从命令行运行所有测试用例时,我仍然得到“无法inheritance最终类” 下面是我从pom.xml获取的代码片段 org.apache.maven.plugins maven-surefire-plugin 2.4 -javaagent:{path}/powermock-module-javaagent-1.6.4.jar

PowerMock:如何取消模拟方法?

我有一个静态方法,使用PowerMock模拟抛出exception。 (它删除文件。)不幸的是,在我的@After (每次测试后)方法中,我需要在没有模拟的情况下调用此方法。 我该如何摆弄方法? 我没有看到Mockito.reset()的等价物。 [参考: mockito:如何取消模拟方法? ] 例: @RunWith(PowerMockRunner.class) @PrepareForTest(PathUtils.class) // Important: This class has a static method we want to mock. public class CleaningServiceImplTest2 extends TestBase { public static final File testDirPath = new File(CleaningServiceImplTest2.class.getSimpleName()); @BeforeClass public static void beforeAllTests() throws PathException { recursiveDeleteDirectory(testDirPath); } @AfterClass public static void afterAllTests() throws PathException { […]

模拟假定存在的私有变量

如果没有在您正在测试的类中创建/初始化模拟对象,它是如何在运行时获取模拟对象的,它不是静态的(单例模式),或者您没有某种类型的测试构造函数可以挂钩? 在我正在编写一些unit testing的类中,我遇到了一个我尚未遇到/解决过的场景。 我有一个JMS资源( QueueConnectionFactory供参考,但它没关系),这是我正在测试的类的私有变量。 由于它具有javax.annotation.Resource注释,因此在运行时它被认为是可用的。 在测试期间,它不是,这就需要模拟这个对象。 它不是一个静态类,并没有以静态方式使用,如果它是我可以轻松地使用我遇到的各种静态模拟方法进行模拟。 由于资源永远不会在本地创建(在构造函数中或甚至在测试构造函数中),因此我无法传入Mock对象,因此在测试的运行时,使用mock而不是实际对象。 如何模拟此资源,以便在测试执行时,它将用于代替我正在测试的类中的私有@Resource对象? 作为参考,代码在QueueConnectionFactory上调用createConnection() ,因为Factory尚未初始化/ QueueConnectionFactory ,所以它会抛出空指针exception。 @Stateless public class Example{ @Resource(name = “jms/exampleQCF”) private QueueConnectionFactory queueFactory; … public void testMe(){ Connection connection = queueFactory.createConnection(); … } }

Powermockvalidation非静态方法中的私有静态方法调用

亲爱的stackoverflow同志,我再次遇到一个问题,让特定的PowerMock / Mockito案例起作用。 问题是,我需要validation私有静态方法的调用,该方法是从公共非静态方法调用的 。 我之前发布的一个类似的示例如何抑制和validation私有静态方法调用? 这是我的代码: class Factory { public String factorObject() throws Exception { String s = “Hello Mary Lou”; checkString(s); return s; } private static void checkString(String s) throws Exception { throw new Exception(); } } 这是我的测试类: @RunWith(PowerMockRunner.class) @PrepareForTest(Factory.class) public class Tests extends TestCase { public void testFactory() throws Exception { Factory […]

如何测试调用父类的受保护(不需要)方法的方法?

我陷入了一个非常奇怪的境地。 我有一些我需要测试的特定代码。 这里是: public class A { /* * The real method of real class is so big that I just don’t want to test it. * That’s why I use throwing an exception. */ protected void method(Integer result) { throw new RuntimeException(“Oops!”); } protected T generifiedMethod(String s, T type) { throw new RuntimeException(“Oops!”); } […]

为什么EclEmma没有带有@RunWith测试的覆盖代码(PowerMockRunner.class)

我正在使用EclEmma和Eclipse来帮助我知道我的项目中缺少代码测试的地方,但所有使用@RunWith(PowerMockRunner.class)测试都没有被调用,因此没有经过测试。 我正在使用JUnit 4.8.1和Mockito。 会是什么呢?

Mockito在创建模拟对象时抛出NullPointer

我有一个集成测试,其中一些设置是使用Guice完成的。 我正在使用Mockito来模拟一些依赖项。 这对我来说一直很好,直到现在。 我需要将PowerMock用于其他依赖项。 现在Mockito在加载一个自己的类时抛出NullPointerException : java.lang.ExceptionInInitializerError at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.(ConditionalStackTraceFilter.java:17) at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:30) at org.mockito.exceptions.base.MockitoException.(MockitoException.java:19) at org.mockito.exceptions.misusing.MockitoConfigurationException.(MockitoConfigurationException.java:18) at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:145) at org.mockito.internal.configuration.ClassPathLoader.findPluginImplementation(ClassPathLoader.java:110) at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:106) at org.mockito.internal.configuration.ClassPathLoader.(ClassPathLoader.java:59) at org.mockito.internal.util.MockUtil.(MockUtil.java:21) at org.mockito.internal.MockitoCore.(MockitoCore.java:40) at org.mockito.Mockito.(Mockito.java:932) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.junit.internal.runners.ClassRoadie.runBefores(ClassRoadie.java:56) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:43) at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:120) at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:101) at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:53) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at […]