Wednesday, 15 February 2012

java - My tests don't work after switching between JUnit to TestNG -



java - My tests don't work after switching between JUnit to TestNG -

i can't understand why code can't execute testng tests. @ same time when utilize junit test (with corresponding junit dependencies) instead of testng works fine. when recreated in thought test classes proper test framework (testng) doesn't work well. problem in powermock.

here simple code testing

public class employee { public static int count(){ throw new unsupportedoperationexception(); } }

my service class under test

public class employeeservice { public int getemployeecount(){ homecoming employee.count(); } }

and test code

@preparefortest(employee.class) public class employeeservicetestngtest { @test public void should_return_count_of_employee_using_the_domain_class() { powermockito.mockstatic(employee.class); powermockito.when(employee.count()).thenreturn(1000); employeeservice employeeservice = new employeeservice(); assert.assertequals(1000, employeeservice.getemployeecount()); } }

and pom.xml dependencies:

<properties> <powermock.version>1.5.5</powermock.version> </properties> <dependencies> <dependency> <groupid>org.powermock</groupid> <artifactid>powermock-module-testng</artifactid> <version>${powermock.version}</version> <scope>test</scope> </dependency> <dependency> <groupid>org.powermock</groupid> <artifactid>powermock-api-mockito</artifactid> <version>${powermock.version}</version> </dependency> <dependency> <groupid>org.powermock</groupid> <artifactid>powermock-module-testng-common</artifactid> <version>1.4.11</version> </dependency> </dependencies>

my stacktrace

java.lang.unsupportedoperationexception @ il.arri.powermock.example.employee.count(employee.java:9) @ il.arri.powermock.example.employeeservicetestngtest.should_return_count_of_employee_using_the_domain_class(employeeservicetestngtest.java:14)

upd

i changed test class to

@preparefortest(employee.class) public class employeeservicetestngtest extends powermocktestcase {

@test public void should_return_count_of_employee_using_the_domain_class() { powermockito.mockstatic(employee.class); powermockito.when(employee.count()).thenreturn(1000); employeeservice employeeservice = new employeeservice(); assert.assertequals(1000, employeeservice.getemployeecount()); } @objectfactory public iobjectfactory getobjectfactory() { homecoming new powermockobjectfactory(); }

}

but still has error:

org.testng.testngexception: error occurred while instantiating class il.arri.powermock.example.employeeservicetestngtest: null @ org.testng.internal.classhelper.createinstance1(classhelper.java:398) @ org.testng.internal.classhelper.createinstance(classhelper.java:299) @ org.testng.internal.classimpl.getdefaultinstance(classimpl.java:115) @ org.testng.internal.classimpl.getinstances(classimpl.java:200) @ org.testng.internal.testngclassfinder.<init>(testngclassfinder.java:120) @ org.testng.testrunner.initmethods(testrunner.java:409) @ org.testng.testrunner.init(testrunner.java:235) @ org.testng.testrunner.init(testrunner.java:205) @ org.testng.testrunner.<init>(testrunner.java:160) @ org.testng.remote.remotetestng$1.newtestrunner(remotetestng.java:141) @ org.testng.remote.remotetestng$delegatingtestrunnerfactory.newtestrunner(remotetestng.java:271) @ org.testng.suiterunner$proxytestrunnerfactory.newtestrunner(suiterunner.java:575) @ org.testng.suiterunner.init(suiterunner.java:159) @ org.testng.suiterunner.<init>(suiterunner.java:113) @ org.testng.testng.createsuiterunner(testng.java:1299) @ org.testng.testng.createsuiterunners(testng.java:1286) @ org.testng.testng.runsuiteslocally(testng.java:1140) @ org.testng.testng.run(testng.java:1057) @ org.testng.remote.remotetestng.run(remotetestng.java:111) @ org.testng.remote.remotetestng.initandrun(remotetestng.java:204) @ org.testng.remote.remotetestng.main(remotetestng.java:175) @ org.testng.remotetestngstarter.main(remotetestngstarter.java:125) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ com.intellij.rt.execution.application.appmain.main(appmain.java:134) caused by: java.lang.nullpointerexception @ org.powermock.core.classloader.mockclassloader.addclassestomodify(mockclassloader.java:133) @ org.powermock.modules.testng.internal.powermockclassloaderobjectfactory.newinstance(powermockclassloaderobjectfactory.java:81) @ org.powermock.modules.testng.powermockobjectfactory.newinstance(powermockobjectfactory.java:42) @ org.testng.internal.classhelper.createinstance1(classhelper.java:387) ... 26 more

upd (solution):

when removed dependency

<dependency> <groupid>org.powermock</groupid> <artifactid>powermock-module-testng-common</artifactid> <version>1.4.11</version> </dependency>

all works greenish :)

isn't unsupportedoperationexception supposed thrown?

you're telling throw exception in static count() method.

you can have unit test expect specific exception thrown.

java unit-testing testng powermock

No comments:

Post a Comment