JUnit 测试 Android NullPointerException

Posted

技术标签:

【中文标题】JUnit 测试 Android NullPointerException【英文标题】:JUnit Testing Android NullPointerException 【发布时间】:2020-12-07 19:54:59 【问题描述】:

我的项目使用 Firebase 实时数据库作为其数据库存储。我正在使用带有存储库和服务层的 MVC 架构。我正在尝试对服务层中的一个方法进行单元测试,该方法将新用户添加到数据库存储库中。

我在下面的行中得到一个空指针异常,我不知道为什么。有什么想法吗?

User testUser = svc.SaveUserProfile(u);

这是我的单元测试代码:

public class RegistrationActivityTest 

UserService svc;

@Test
public void testAddUserToDb_WhenNone_ShouldSetAllProperties()
    //act
    User u = new User("1", "John", "john@email.com", "Teacher");
    User testUser = svc.SaveUserProfile(u);

    //assert - that testUser is not null
    assertNotNull(testUser);

    //now assert that the user properties were set correctly
    assertEquals("1", testUser.getUserId());
    assertEquals("John", testUser.getName());
    assertEquals("john@email.com", testUser.getEmail());
    assertEquals("Teacher", testUser.getAccount());

这是我的服务层和接口代码:

public class UserService implements IUserService 

//instance of DbContext for firebase handling
private DbContext dbContext;

public UserService(Context context)
    super();
    dbContext = new DbContext(context);


@Override
public User SaveUserProfile(User u) 
    User user = new User();
    user.setUserId(u.getUserId());
    user.setName(u.getName());
    user.setEmail(u.getEmail());
    user.setAccount(u.getAccount());

    dbContext.AddUserAccount(user);

    return user;

界面:

public interface IUserService 

User SaveUserProfile(User u);
 

【问题讨论】:

【参考方案1】:

您的svc 是未创建的对象。使用前先创建:

UserService svc = new UserService(context)

【讨论】:

我改成使用UserService接口(IUserService),按照你说的创建,通过了,谢谢!

以上是关于JUnit 测试 Android NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

Android单元测试系列-Junit

Android单元测试系列-Junit

[android] android下junit测试框架配置

Android JUnit Test——批量运行测试代码

使用 gradle 进行 android 项目的 junit 测试

适用于 Android 项目的 Bamboo Junit 测试解析器