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?
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
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 –
Ich würde gerne deinen fehlgeschlagenen TestNG-Test sehen, weil '@RunWith 'funktioniert nicht mit TestNG. – juherr