1

I have a testNG test class that extends some public base test class. The testNG class runs perfectly fine when I create the objects locally such as

public class SomeTest extends BaseTest {
    @Test()
    public void test() throws {
        Checkout checkout = new Checkout(getDriver());
        checkout.setValues("ASdf");
    }
}

however, if I try and move the Checkout object to the BaseTest class so that any test extending BaseTest can use that page object, I get the "cannot instantiate class error'

public class BaseTest {
    protected Checkout checkout = new Checkout(getDriver());
    protected WebDriver getDriver() {
        return driver;
    }
}
public class SomeTest extends BaseTest {
    @Test()
    public void test() throws {
        checkout.setValues("ASdf");
    }
}




Cannot instantiate class com.asdf.websitetest.tests.checkouttests.SomeTest
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:30)
    at org.testng.internal.InstanceCreator.instantiateUsingDefaultConstructor(InstanceCreator.java:193)
    at org.testng.internal.InstanceCreator.createInstanceUsingObjectFactory(InstanceCreator.java:113)
    at org.testng.internal.InstanceCreator.createInstance(InstanceCreator.java:79)
    at org.testng.internal.ClassImpl.getDefaultInstance(ClassImpl.java:109)
    at org.testng.internal.ClassImpl.getInstances(ClassImpl.java:167)
    at org.testng.TestClass.getInstances(TestClass.java:102)
    at org.testng.TestClass.initTestClassesAndInstances(TestClass.java:82)
    at org.testng.TestClass.init(TestClass.java:74)
    at org.testng.TestClass.<init>(TestClass.java:39)
    at org.testng.TestRunner.initMethods(TestRunner.java:459)
    at org.testng.TestRunner.init(TestRunner.java:338)
    at org.testng.TestRunner.init(TestRunner.java:291)
    at org.testng.TestRunner.<init>(TestRunner.java:222)
    at org.testng.remote.support.RemoteTestNG6_12$1.newTestRunner(RemoteTestNG6_12.java:33)
    at org.testng.remote.support.RemoteTestNG6_12$DelegatingTestRunnerFactory.newTestRunner(RemoteTestNG6_12.java:66)
    at org.testng.ITestRunnerFactory.newTestRunner(ITestRunnerFactory.java:55)
    at org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(SuiteRunner.java:676)
    at org.testng.SuiteRunner.init(SuiteRunner.java:178)
    at org.testng.SuiteRunner.<init>(SuiteRunner.java:112)
    at org.testng.TestNG.createSuiteRunner(TestNG.java:1275)
    at org.testng.TestNG.createSuiteRunners(TestNG.java:1251)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1100)
    at org.testng.TestNG.runSuites(TestNG.java:1039)
    at org.testng.TestNG.run(TestNG.java:1007)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:115)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.testng.internal.ObjectFactoryImpl.newInstance(ObjectFactoryImpl.java:23)
    ... 27 more
Caused by: java.lang.NullPointerException
    at com.asdf.websitetest.pages.Checkout.<init>(Checkout.java:22)
    at com.asdf.websitetest.tests.bases.BaseTest.<init>(BaseTest.java:21)
    at com.asdf.websitetest.tests.bases.CheckoutBase.<init>(CheckoutBase.java:6)
    at com.asdf.websitetest.tests.checkouttests.SomeTest.<init>(SomeTest.java:12)
    ... 32 more
displayName
  • 195
  • 2
  • 15
  • Can you please ad the complete stacktrace? – Jens Mar 31 '20 at 18:10
  • @Jens added stack trace, SomeTest actually extends CheckoutBase which in turn extends BaseTest, but I didn't include that since CheckoutBase has nothing in it at the moment. – displayName Mar 31 '20 at 18:20

0 Answers0