当前位置: 首页 > 知识库问答 >
问题:

testng套件第二次测试失败->nullpointerexception

越伟泽
2023-03-14
 public class BaseTest {

    protected DocumentDaoImpl documentDao;
    protected UserDaoImpl userDao;


  @BeforeSuite
  public void beforeSuite() {
        EntityManagerUtil.setPersistenceUnitName("db_test"); //initialize entityManagerFactory once for all tests as well as daos
        documentDao = DAOFactory.getDocumentDAO();
        userDao = DAOFactory.getUserDao();
  }

  @AfterSuite
  public void afterSuite() {
    EntityManagerUtil.closeEntityManagerFactory();
  }
}

测试1:

public class DocumentDaoImplTest extends BaseTest{

    @Test(dataProviderClass = DocumentDataProvider.class, dataProvider = DocumentDataProvider.ONE_DOCUMENT_PROVIDER)
    public void findByMatricule(Document document) {
        documentDao.create(document);
        Document result = documentDao.findByMatricule(document.getMatricule());
        Assert.assertNotNull(result);
        Assert.assertEquals(result.getMatricule(), document.getMatricule());
    }
}

测试2:

public class UserDaoImplTest extends BaseTest{

    @Test(dataProviderClass = UserDataProvider.class, dataProvider = UserDataProvider.ONE_USER_PROVIDER)
    public void findByDocumentId(User user) {
        // nullpointer userDao
        userDao.create(user);
        User result = userDao.findByDocumentId(user.getDocumentId());
        Assert.assertNotNull(result);
        Assert.assertEquals(result.getDocumentId(), user.getDocumentId());
    }

}

testng.xml

<test name="DAOTest">
    <packages>
        <package name="com.dev.test.dao"/>
    </packages> 
</test>
java.lang.NullPointerException
    at com.dev.test.dao.UserDaoImplTest.findByDocumentId(UserDaoImplTest.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:643)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:132)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:236)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:81)

共有1个答案

云光明
2023-03-14

您必须重新编写您的测试:

@beforeSuite按套件只调用一次。您有两个类,然后第一个类实例化了dao,另一个没有(在本例中是NPE)。

一种选择是对DAO使用static。另一种解决方案是将documentdao=daoFactory.getdocumentdao();放入@beforeclass中。但是你可以找到许多其他(更好的)解决方案。

 类似资料:
  • 主要内容:1. 测试类,2. testng.xml,其他例子测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。 在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示,因为套件是执行的功能。 它还允许灵活配置要运行的测试。 套件可以包含一个或多个测试,并由标记定义。 是的根标记。 它描述了一个测试套件,它又由几个部分组成。 下表列出了接受的所有定义的合法属性。 属性 描述 name 套件的名称,这是一个强制属性。 ve

  • 问题内容: 如果测试失败,我想截图。与其将所有测试方法都包裹在try / catch块中,不如将这种逻辑添加到以标记的方法中。 如何在当前测试失败的注解方法中进行检测? 问题答案: 如果带有注释的方法具有参数,则TestNG将自动注入测试结果。(来源:TestNG文档,第5.18.1节) 这应该做的工作:

  • 一、自我介绍 这次面试最大的败笔就是自我介绍脑袋发昏,睡眠不足太累了根本没发挥好。首先自我介绍就扣分。 二、技术面 面试官询问是否了解次世代建模流程,问建模流程大概是什么步骤,我这都没答出来😅。 技术问题,面试官主要问了一些是否足够了解法线。 总结:技术面主要针对岗位需求,岗位需要你做什么,基本就会问相关的问题,比起真的做完一个全流程的项目,现在更重要的是好好补一下建模的基本知识。

  • 我试图使用XML和TestNG运行一个测试套件,但是我总是同时使用Eclipse和命令行得到相同的消息: 该文件已正确读取,但测试似乎没有运行。 以下是我的testng.xml的内容: 这是我的目录结构在Eclipse中的样子: 此外,这也是我试图通过命令行运行测试套件的方式: 我尝试过通过eclipse清理项目,但似乎没有帮助。我也试过跑步: < code>mvn clean,但它也没有完成工作

  • 我有以下RxJava2 Kotlin代码: 这模拟了一个可完全观察的对象(想象对API的一个简单更新操作),然后是一个可观察的对象(图像是API上的一个get操作)。我希望以一种方式连接这两个可观察对象,当Completable完成时,运行单个对象,最后在我的观察者(Int 42)上获得onSuccess事件。 但是,此测试代码不起作用。断言失败,出现以下错误: 我无法理解我做错了什么,我希望Co