重新运行测试时出现 NullPointerException

Posted

技术标签:

【中文标题】重新运行测试时出现 NullPointerException【英文标题】:NullPointerException when re-running a test 【发布时间】:2013-03-20 09:04:28 【问题描述】:

我正在对基于 Play 框架的应用程序进行单元测试。正如我在文档中所读到的,为了清除状态,在每次测试之前我都会重新加载这样的固定装置列表:

    @Before
    public void setUp() 
        Fixtures.deleteAll();
        Fixtures.load("data.yml");
        Logger.info("FIXTURES RELOADED");
    

然后我转到基于 Web 的测试平台(http://localhost:9000/@tests),选择一个处理获取一些数据的测试(User u = User.findById(1l);),然后针对数据进行断言。有用。

但是,如果我尝试再次选择测试并重新运行它,它会失败并显示:

A java.lang.NullPointerException has been caught, Try to read name on null object models.User 

如果我完全停止应用程序并重新启动它,它会再次运行(第一次),但启动和停止会花费一些时间并且非常乏味,如果您每分钟执行 10 次。

我正在使用 Play 1.2.5

【问题讨论】:

每次运行时是否调用 setup()? 你在哪里插入你的用户对象到数据库? 试试@BeforeMethod - 而不是@Before Fixtures.load 中的@baraky... @Sudhanshu,是的,这就是为什么我把日志记录放在最后 【参考方案1】:

问题是自动递增用户 ID(在每次插入时),同时尝试在每次测试中获取 ID 为 1 的用户。

您可以获取新创建的用户 ID 并在测试中使用它,或者通过您确定的其他字段查找用户。

【讨论】:

这正是问题所在。因此,在我的测试中,我将避免使用 findById 获取用户,而是使用我确定不会更改的内容,例如 User.find("byUsername", "testuser1")

以上是关于重新运行测试时出现 NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

更改 CSS 时出现 NullPointerException 的无限流

获取“结果已过期,如果需要,请重新运行查询。”在 Hive 中运行代码时出现错误消息

运行 Spring Boot 集成测试时出现 Liquibase 问题

从后台运行应用程序时重新启动应用程序时出现闪屏问题

仅在运行测试时出现 DexIndexOverflowException

(Friday Night Funkin') 运行“lime 测试窗口”时出现问题