使用TestNG@DataProvider,它返回;[Utils][ERROR][ERROR]java.lang.NullPointerException“;调用返回对象[][]的方法()时

使用TestNG@DataProvider,它返回;[Utils][ERROR][ERROR]java.lang.NullPointerException“;调用返回对象[][]的方法()时,testng,Testng,我有一个类,它有一个方法连接到DB并获取所有用户的用户名和密码。我将该方法传递给TestNG@DataProvider,以便@Test可以使用它 摘要如下所示 公共类测试2{ @测试(dataProvider=“dp”) public void f(字符串用户名、字符串密码){ System.out.println(用户名); System.out.println(密码); } //选项1:不起作用 //将返回[Utils][ERROR][ERROR]java.lang.NullPointer

我有一个类,它有一个方法连接到DB并获取所有用户的用户名和密码。我将该方法传递给TestNG@DataProvider,以便@Test可以使用它

摘要如下所示

公共类测试2{
@测试(dataProvider=“dp”)
public void f(字符串用户名、字符串密码){
System.out.println(用户名);
System.out.println(密码);
}
//选项1:不起作用
//将返回[Utils][ERROR][ERROR]java.lang.NullPointerException
@数据提供者
公共对象[][]dp()引发ClassNotFoundException、SQLException{
//从方法所在的类创建实例,然后调用该方法凭据
Object[][]data=_类的实例_。从_DB()获取_数据的方法_;
返回数据;
//选项2:工作正常
@数据提供者
公共对象[][]dp()引发ClassNotFoundException、SQLException{
//将逻辑直接放在这里,而不调用任何方法
//逻辑。。。
//逻辑。。。
//逻辑。。。
//最终结果是对象[][]数据

返回数据;
您需要在函数中添加static。 从文件中:

用于查找数据提供程序的类。如果未指定,则 将在当前测试方法的类上查看数据提供程序 或其基类之一。如果指定了此属性,则 提供程序方法在指定类上必须是静态的


您似乎正在从数据提供程序的这一行触发
NullPointerException

Object[][] data =searching.credentials("interbase.interclient.Driver", "DBuserName", "DBpassword", "jdbc:interbase://10.110.10.10:3050/e:/Databases/DATABASE.IB", "5204", "5201");
我不知道您在哪里实例化对象
搜索
。我想这就是导致
NullPointerException
的原因。您可以尝试将
credentials()
方法作为静态方法,将
static
关键字添加到其定义中吗?希望这能为您解决问题

java.lang.NullPointerException
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Unknown Source)
   at ssdPage.SSDSearchPage.credentials(SSDSearchPage.java:52)
出于任何原因,看起来您正在将
null
作为
driverClass
提供给
Class.forName(…)

但是你没有提供足够的细节来帮助你。

谢谢@Ron,我尝试了这个
@DataProvider公共静态对象[][]getData()抛出ClassNotFoundException,SQLException{………}
,它仍然向我抛出相同的错误消息。@keylogger你能提供完整的异常堆栈吗?谢谢@RonHashimshony,我在主要问题中添加了完整的异常消息。异常实际上没有告诉我们太多。你必须找到NPE在哪里以及原因。谢谢@juherr,我添加了完整的异常消息,但对我来说我没有多大帮助。很好的尝试,这也是我的第一个想法。但是
搜索
是一个类名…;)我认为
搜索
应该是
SSDSearchPage
类型的对象。这是stacktrace至少向我指出的:)