2017-03-02 1 views
0

Ich benutze TestNG, um Test zu testen und meine Anwendung zu verspotten.PowerMockito.whenNew() funktioniert gut mit Junit-Test, aber nicht mit TestNg Test

Mein Problem ist, dass, wenn ich PowerMockito.whenNew(ClassB.class) Methode und Debug in ClassA verwenden, fand ich, dass objB ist das Original nicht verspottet.
Nach vielen Untersuchungen verwendete ich

Import org.junit.Test;

anstelle von

import org.testng.annotations.Test;

und verwenden Sie den Junit-Test anstelle von TestNG. Was war überraschend, dass es den erwarteten Wert mit JUnit (666) zurückgegeben hat, aber mit TestNG zurückgegeben (15), was nicht erwartet wird.

Alle Klassen und der pom-Datei ist unter

package unit.test; 
import org.junit.runner.RunWith; 
import org.powermock.api.mockito.PowerMockito; 
import org.powermock.core.classloader.annotations.PrepareForTest; 
import org.powermock.modules.junit4.PowerMockRunner; 
import org.testng.annotations.Test; 

@RunWith(PowerMockRunner.class) 
@PrepareForTest({ ClassA.class, ClassB.class }) 
public class App { 
    @Test 
    public void shoudlReturn666() throws Exception { 
     ClassB mockB = PowerMockito.mock(ClassB.class); 
     PowerMockito.when(mockB.get15()).thenReturn(666); 
     PowerMockito.whenNew(ClassB.class).withNoArguments().thenReturn(mockB); 
     Assert.assertTrue(new ClassA().callB() == 666); 
    } 
} 

Klasse A -

package unit.test; 
public class ClassA { 
    public int callB() { 
     ClassB objB = new ClassB(); 
     return objB.get15(); 
    } 
} 

Klasse B -

package unit.test; 
public class ClassB { 
    public int get15() { 
     return 15; 
    } 
} 

Pom-Datei

<dependencies> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>1.10.19</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-mockito-release-full</artifactId> 
      <version>1.6.4</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-api-mockito</artifactId> 
      <version>1.5</version> 
      <scope>test</scope> 
     </dependency> 
</dependencies> 

Ergebnis ist:

   [TestNG] Running: 
       C:\Users\Wael Elkholy\AppData\Local\Temp\testng-eclipse--514551319\testng-customsuite.xml 

      FAILED: shoudlReturnTheCValue 
      junit.framework.AssertionFailedError: null 
       at junit.framework.Assert.fail(Assert.java:47) 
       at junit.framework.Assert.assertTrue(Assert.java:20) 
       at junit.framework.Assert.assertTrue(Assert.java:27) 
       at unit.test.App.shoudlReturnTheCValue(App.java:17) 
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
       at java.lang.reflect.Method.invoke(Unknown Source) 
       at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85) 
       at org.testng.internal.Invoker.invokeMethod(Invoker.java:696) 
       at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:882) 
       at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1189) 
       at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:124) 
       at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108) 
       at org.testng.TestRunner.privateRun(TestRunner.java:767) 
       at org.testng.TestRunner.run(TestRunner.java:617) 
       at org.testng.SuiteRunner.runTest(SuiteRunner.java:348) 
       at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343) 
       at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305) 
       at org.testng.SuiteRunner.run(SuiteRunner.java:254) 
       at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
       at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
       at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224) 
       at org.testng.TestNG.runSuitesLocally(TestNG.java:1149) 
       at org.testng.TestNG.run(TestNG.java:1057) 
       at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132) 
       at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:230) 
       at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:76) 


      =============================================== 
       Default test 
       Tests run: 1, Failures: 1, Skips: 0 
      =============================================== 


      =============================================== 
      Default suite 
      Total tests run: 1, Failures: 1, Skips: 0 
      =============================================== 

      [TestNG] Time taken by [email protected]: 59 ms 
      [TestNG] Time taken by [email protected]: 20 ms 
      [TestNG] Time taken by [email protected]: 65 ms 
      [TestNG] Time taken by [email protected]: 127 ms 
      [TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 18 ms 
      [TestNG] Time taken by [email protected]: 18 ms 

irgendein Problem mit meinem Code ist?

+0

Wenn ich die Frage gut verstehen, Sie fragen, wie Sie Ihren junit Arbeits Test auf einen testng Test zu migrieren? Könnten Sie Ihren fehlgeschlagenen Test Test teilen? – juherr

+0

Eigentlich benutze ich testng, aber wie ich bereits erwähnt habe, ist dieses Szenario mit testng gescheitert, während es mit Junit erfolgreich ist ... bitte revidiere meine Frage..ich habe es bearbeitet –

+0

Ich würde gerne deinen fehlgeschlagenen TestNG-Test sehen, weil '@RunWith 'funktioniert nicht mit TestNG. – juherr

Antwort

0

Nach the PowerMock documentation:

@PrepareForTest({ ClassA.class, ClassB.class }) 
public class App extends PowerMockTestCase { 
    @Test 
    public void shoudlReturn666() throws Exception { 
     ClassB mockB = PowerMockito.mock(ClassB.class); 
     PowerMockito.when(mockB.get15()).thenReturn(666); 
     PowerMockito.whenNew(ClassB.class).withNoArguments().thenReturn(mockB); 
     Assert.assertTrue(new ClassA().callB() == 666); 
    } 
} 
+0

danke Juherr, es hat gut funktioniert –

Verwandte Themen