gpt4 book ai didi

java - 模拟空指针异常

转载 作者:行者123 更新时间:2023-12-02 08:50:54 25 4
gpt4 key购买 nike

我尝试对服务中的方法 getPersonsFromAddress() 进行 Junit 测试,我尝试模拟对象模型,但是当我执行测试时,调用 model.getPersons() 时,服务中会出现 NullPointerException。

这是我使用方法 getPersonsFromAddress() 的服务:

@Service
public class ChildAlertService {

@Autowired
private Model model;

@Autowired
private Util util;

public List<Person> getPersonsFromAdress (String address) {
List<Person> listPersons = model.getPersons();
List<Person> listPersonsFromAddress = new ArrayList<>();
for (Person person : listPersons) {
if(person.getAddress().contains(address)) {
listPersonsFromAddress.add(person);
}
}
return listPersonsFromAddress;
}

这是我的测试:

@ExtendWith(MockitoExtension.class)
public class ChildAlertServiceTest {

private static ChildAlertService childAlertService;

@Mock
private Model model;

@BeforeAll
private static void setUp() {
childAlertService = new ChildAlertService();
}

@Test
public void testGetPersonsFromAdress () {
List<Person> listPersons = new ArrayList<>();
Person person1 = new Person();
person1.setFirstName("John");
person1.setFirstName("Boyd");
person1.setAddress("1509 Culver St");


listPersons.add(person1);

Person person2 = new Person();
person2.setFirstName("Roger");
person2.setFirstName("Boyd");
person1.setAddress("1509 Culver St");

listPersons.add(person2);

Person person3 = new Person();
person3.setFirstName("Jonanathan");
person3.setFirstName("Marrack");
person3.setAddress("29 15th St");

listPersons.add(person3);

when(model.getPersons()).thenReturn(listPersons);

String address = "1509 Culver St";
List <Person> listPersonResult = childAlertService.getPersonsFromAdress(address);
assertNotNull(listPersonResult);
}

}

感谢您的帮助。

最佳答案

您从未在测试中的 ChildAlertService 中初始化 model。您的模拟从未被使用过。

在您的产品代码中,您依赖于字段注入(inject)。

参见:What exactly is Field Injection and how to avoid it?

最干净的方法是在服务中使用构造函数注入(inject),并在测试中使用该构造函数(手动或通过@InjectMocks)

关于java - 模拟空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60779785/

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