2011-01-08 2 views
0

Pour vous dire d'abord, je l'ai essayé et essayé encore et maintenant je besoin d'aideCant fonctions statiques simulées avec powermock-easymock-testng (projet non-maven)

Heres mon code


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 

[Parser] course à pied: 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 
=============================================== 

Il lp s'il vous plaît, j'ai essayé une variété de solutions, ne peut pas le faire. S'il vous plaît quelqu'un peut-il essayer ce code et le corriger pour le succès? je reçois erreur dans EasyMock.expect ...............

obtenu un emploi autour de http://blogs.bytecode.com.au/glen/2006/10/12/doing-bytecode-kungfu-with-javassist.html Et ça marche Mais attendez .......... Je suis coincé à nouveau Mon test fonctionne très bien quand il fonctionne seul, mais lorsqu'il est exécuté avec Ant, cela pose problème. Peut-être que d'autres cas de test de fichiers différents interfèrent. j'ai eu la même erreur, quand mon cas de test individuel utilisait @PrepareTest & easymock/powermock

[testng] = ==================== APPELLE STATIC ============================= [testng] javassist.CannotCompileException: par java.lang.LinkageError: loader (instance de sun/misc/Launcher $ AppClass Loader): tentative de définition de classe dupliquée pour le nom: "com/symantec/mobius/aggregator/soumission/SubmissionFactory" [testng] à javassist.ClassPool.toClass (ClassPool.java:1085) [testng] at javassist. ClassPool.toClass (ClassPool.java:1028) [testng] à javassist.ClassPool.toClass (ClassPool.java:986) [testng] à javassist.CtClass.toClass (CtClass.java:1110)

Répondre

1

Essayez d'étendre à partir de PowerMockTestCase. Le support de TestNG sera également mis à jour dans la prochaine version de PowerMock (1.4.9).

1

J'ai fait face à ce même problème, et j'ai eu beaucoup de difficultés. Enfin, trouvé la solution suivante:

Une autre alternative consiste à définir le object-factory à org.powermock.modules.testng.PowerMockObjectFactory dans le test.NG suite.xml. Voici un fichier de suite échantillon:

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

Bien sûr, vous pouvez également prolonger votre cas de test à partir PowerMockTestCase comme dit par Johan.

+0

Salut Sunil, Bienvenue au débordement de pile. Pour référence ultérieure, si vous allez coller du code XML ou HTML (ou tout autre code/langue), assurez-vous de le marquer comme code (bouton editor ou ctrl-K) car sinon il pourrait ne pas être visible. – Basic

1

Mock toutes les méthodes statiques dans la classe statique avant de procéder à une simulation de la méthode statique. Essayez avec ceci:

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