gpt4 book ai didi

java - 测试时如何将模拟对象注入(inject)类?

转载 作者:行者123 更新时间:2023-12-05 00:13:39 25 4
gpt4 key购买 nike

我的用户类如下,

public class UserResource {
@Inject UserService userService;

public boolean createUser(User user) {
DbResponse res = userService.addUser(user);
if(res.isSuccess){
return true;
}else{
return false;
}
}
}

我的测试类如下所示,
public class UserResourceTest {

UserResource userResource;

@BeforeMethod
void beforeMethod() {
userResource = new UserResource();
}

@Test
public void test() {
User user= mock(User.class);
boolean res= userResource.createUser(user);
assert(res);
}
}

如您所见,应该将 UserService 对象注入(inject)到 UserResource 类中。如何在我的测试中向 userResource 对象注入(inject)一个模拟 UserService 对象?
供引用:
  • 这是 Jersey JAX-RS 项目的一部分。
  • 我正在使用 Java CDI、mockito 和 testNG(作为测试库)。
  • 最佳答案

    考虑通过构造函数注入(inject)使用显式依赖主体,因为它非常清楚地说明了类执行其特定功能所需的内容。

    public class UserResource {
    private UserService userService;

    @Inject
    public UserResource(UserService userService) {
    this.userService = userService;
    }

    public boolean createUser(User user) {
    DbResponse res = userService.addUser(user);
    if(res.isSuccess){
    return true;
    }else{
    return false;
    }
    }
    }

    并模拟 UserService并将其分配给被测对象。为测试配置所需/模拟的行为。
    public class UserResourceTest {

    @Test
    public void test() {
    //Arrange
    boolean expected = true;
    DbResponse mockResponse = mock(DbResponse.class);
    when(mockResponse.isSuccess).thenReturn(expected);

    User user = mock(User.class);
    UserService mockService = mock(UserService.class);
    when(mockService.addUser(user)).thenReturn(mockResponse);

    UserResource userResource = new UserResource(mockService);

    //Act
    boolean actual = userResource.createUser(user);

    //Assert
    assert(expected == actual);
    }
    }

    关于java - 测试时如何将模拟对象注入(inject)类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256831/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com