Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 无法使用powermock easymock testng模拟静态函数(非maven项目)_Function_Static_Testng_Easymock_Powermock - Fatal编程技术网

Function 无法使用powermock easymock testng模拟静态函数(非maven项目)

Function 无法使用powermock easymock testng模拟静态函数(非maven项目),function,static,testng,easymock,powermock,Function,Static,Testng,Easymock,Powermock,首先告诉你,我试了又试,现在我需要一些帮助 这是我的密码 package staticPkg; public class Static { public static final String staticMethod() { System.out.println("Static method called"); return "Static called"; } } package staticPkg; public class TargetClass { Stati

首先告诉你,我试了又试,现在我需要一些帮助

这是我的密码


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);

 }
}

[Parser]正在运行: C:\MockWorkspace\Mock\temp-testng-customsuite.xml

got object factory print me Static method called FAILED: testMe java.lang.IllegalStateException: no last call on a mock available at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:521) at org.easymock.EasyMock.expect(EasyMock.java:499) at staticPkg.TestClass.testMe(TestClass.java:46) ... Removed 22 stack frames =============================================== staticPkg.TestClass Tests run: 1, Failures: 1, Skips: 0 =============================================== =============================================== Mock Total tests run: 1, Failures: 1, Skips: 0 =============================================== 目标工厂 打印我 静态方法调用 失败:testMe 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中得到错误。期望

在附近有工作吗 它是有效的 但是等等……我又被卡住了 我的测试用例在单独运行时运行良好,但在使用Ant运行时,会出现问题。可能是不同文件的其他测试用例相互干扰。 当我的单个测试用例使用@PrepareTest&easymock/powermock时,我也遇到了同样的错误

[testng]===============================静态呼叫=========================== [testng]javassist.CannotCompileException:by java.lang.LinkageError:loader(sun/misc/Launcher$AppClass的实例 Loader):尝试为名称复制类定义:“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]位于javassist.CtClass.toClass(CtClass.java:1110)

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

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

我也面临着同样的问题,并为此付出了很多努力。最后,我们找到了以下解决方案:

另一种选择是在testng suite.xml中将
对象工厂设置为
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扩展您的测试用例。

我也面临着同样的问题,并且为此付出了很多努力。最后,我们找到了以下解决方案:

另一种选择是在testng suite.xml中将
对象工厂设置为
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扩展测试用例。

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

@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);
 }

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

@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);
 }

嗨,Sunil,欢迎来到stack overflow。为便于将来参考,如果要粘贴XML或HTML(或任何其他代码/语言),请确保将其标记为代码(编辑器按钮或ctrl-K),否则它可能不可见。嗨,Sunil,欢迎使用堆栈溢出。为了便于将来参考,如果要粘贴XML或HTML(或任何其他代码/语言),请确保将其标记为代码(编辑器按钮或ctrl-K),否则它可能不可见。