【问题标题】:Cant mock static functions with powermock-easymock-testng (non-maven project)无法使用 powermock-easymock-testng 模拟静态函数(非 Maven 项目)
【发布时间】:2011-01-08 12:39:29
【问题描述】:

首先告诉你,我已经尝试过,现在我需要一些帮助

这是我的代码


package staticPkg;

public class Static {

 public static final String staticMethod() {
  System.out.println("Static method called");
  return "Static called";
 }

}
package staticPkg;

public class TargetClass {

 Static staticClass;
 public String callHere() {
  return Static.staticMethod();
 }

}

package staticPkg;

import org.easymock.EasyMock;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.testng.IObjectFactory;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.ObjectFactory;
import org.testng.annotations.Test;

@PrepareForTest({Static.class})
public class TestClass  {

 Static staticClass = null;

 @ObjectFactory
 public IObjectFactory getObjectFactory() {
System.out.println("got object factory");

return new org.powermock.modules.testng.PowerMockObjectFactory();
 }

 @BeforeMethod
 public void setup() {
  System.out.println("print me");
  PowerMock.mockStatic(Static.class);
  staticClass = PowerMock.createMock(Static.class);

 }


 @Test
 public void testMe() {
  EasyMock.expect(Static.staticMethod()).andReturn("Mock called").anyTimes();
  PowerMock.replay(Static.class,staticClass);
  TargetClass tc = new TargetClass();
  String output = tc.callHere();
  PowerMock.verify(Static.class,staticClass);
  System.out.println(output);

 }
}

And heres the log

[解析器] 运行: C:\MockWorkspace\Mock\temp-testng-customsuite.xml

得到对象工厂 打印我 静态方法调用 失败:测试我 java.lang.IllegalStateException:没有可用的模拟最后一次调用 在 org.easymock.EasyMock.getControlForLastCall(EasyMock.java:521) 在 org.easymock.EasyMock.expect(EasyMock.java:499) 在 staticPkg.TestClass.testMe(TestClass.java:46) ... 删除了 22 个堆栈帧 ================================================ staticPkg.TestClass 测试运行:1,失败:1,跳过:0 ================================================ ================================================ 嘲笑 总测试运行:1,失败:1,跳过:0 ================================================

请帮助,我尝试了多种解决方案,无法完成。 请任何人都可以尝试此代码并更正它以获得成功吗? 我在 EasyMock.expect 中遇到错误......

http://blogs.bytecode.com.au/glen/2006/10/12/doing-bytecode-kungfu-with-javassist.html 找到了解决办法 它有效 但是等等…………我又卡住了 我的测试用例单独运行时工作正常,但与 Ant 一起运行时,它会出现问题。可能是不同文件的其他测试用例在干扰。 当我的个人测试用例使用 @PrepareTest 和 easymock/powermock 时,我遇到了同样的错误

[测试] =====================静态调用====================== ===== [testng] javassist.CannotCompileException: by java.lang.LinkageError: loader (sun/misc/Launcher$AppClass 的实例 加载程序):尝试重复名称的类定义:“com/symantec/mobius/aggregator/submission/SubmissionFactory” [testng] 在 javassist.ClassPool.toClass(ClassPool.java:1085) [testng] 在 javassist.ClassPool.toClass(ClassPool.java:1028) [testng] 在 javassist.ClassPool.toClass(ClassPool.java:986) [testng] at javassist.CtClass.toClass(CtClass.java:1110)

【问题讨论】:

    标签: function static testng easymock powermock


    【解决方案1】:

    尝试从 PowerMockTestCase 扩展。下一个版本的 PowerMock (1.4.9) 也将更新对 TestNG 的支持。

    【讨论】:

      【解决方案2】:

      我也遇到过同样的问题,并且很挣扎。最后,找到如下解决方案:

      另一种方法是在 TestNG suite.xml 中将 object-factory 设置为 org.powermock.modules.testng.PowerMockObjectFactory。这是一个示例套件文件:

      <suite name="dgf" verbose="10" object-factory="org.powermock.modules.testng.PowerMockObjectFactory">
          <test name="dgf">
              <classes>
                  <class name="com.example.ClientTest"/>
              </classes>
          </test>
      </suite>
      

      当然,您也可以按照 Johan 的说法从 PowerMockTestCase 扩展您的测试用例。

      【讨论】:

      • 嗨 Sunil,欢迎来到堆栈溢出。为了将来参考,如果您要粘贴 XML 或 HTML(或任何其他代码/语言),请确保将其标记为代码(编辑器按钮或 ctrl-K),否则它可能不可见。
      【解决方案3】:

      在继续模拟静态方法之前模拟静态类中的所有静态方法。试试这个:

      @Test
       public void testMe() {
         PowerMock.mockStatic(Static.class);
         EasyMock.expect(Static.staticMethod()).andReturn("Mock called").anyTimes();
         PowerMock.replay(Static.class,staticClass);
         TargetClass tc = new TargetClass();
         String output = tc.callHere();
         PowerMock.verify(Static.class,staticClass);
         System.out.println(output);
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多