0

最初に言うと、私は何度も何度も試しましたが、今は助けが必要です

私のコードはこちら


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

オブジェクトファクトリを取得しました
私を印刷してください
呼び出された静的メソッド
失敗: 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.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: ローダー (sun/misc/Launcher$AppClass Loader のインスタンス): 名前の重複クラス定義を試行しました: "com/symantec/mobius/aggregator/submission/SubmissionFactory" [testng] at javassist.ClassPool.toClass(ClassPool.java:1085) [testng] at javassist.ClassPool.toClass(ClassPool.java:1028) [testng] at javassist.ClassPool.toClass(ClassPool.java:986) [testng] ] javassist.CtClass.toClass(CtClass.java:1110) で

4

3 に答える 3

1

I faced this same issue, and struggled a lot. Finally, found the following solution:

Another alternative is to set the object-factory to org.powermock.modules.testng.PowerMockObjectFactory in the TestNG suite.xml. Here is a sample suite file:

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

Of course, you can also extend your test case from PowerMockTestCase as told by Johan.

于 2012-02-08T18:06:43.350 に答える
1

PowerMockTestCase から拡張してみてください。TestNG のサポートも、PowerMock の次のバージョン (1.4.9) で更新されます。

于 2011-04-27T12:20:17.583 に答える
1

静的メソッドのモックに進む前に、静的クラスのすべての静的メソッドをモックします。これを試してください:

@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);
 }
于 2012-04-11T06:20:09.873 に答える