gpt4 book ai didi

java - @Spy 在两个列表上注释时不起作用

转载 作者:行者123 更新时间:2023-11-30 06:31:03 25 4
gpt4 key购买 nike

这是我的PersonSeviceImpl类。在保存任何人之前,我想运行一些实现 PersonValidator 的 validator 。我还 Autowiring 了 PersonStatusChangeValidator 以在不同的方法中使用。

public class PersonServiceImpl implements PersonService {

@Autowired
PersonDao personDao;

@Autowired
List<PersonStatusChangeValidator> statusChangeValidators;

@Autowired
List<PersonValidator> personValidators;

@Override
public Person save(Person person) {
for(PersonValidator validator: personValidators){
validator.validate(person);
}
personDao.save(person);
return person;
}
}

这里我正在编写测试来验证 validator 是否被调用。

@RunWith(PowerMockRunner.class)
public class PersonServiceImplTest {

@Mock
private PersonDao personDao;

@Mock
private PersonValidator personValidator;

@Mock
private PersonStatusChangeValidator statusChangeValidator;

@Spy
private List<PersonStatusChangeValidator> statusChangeValidators = new ArrayList<>();

@Spy
private List<PersonValidator> personValidators = new ArrayList<>();

@InjectMocks
private PersonServiceImpl personService;

@Before
public void init() {
MockitoAnnotations.initMocks(this);

personValidators.add(personValidator);
statusChangeValidators.add(statusChangeValidator);
}

@Test
public void testCreatePerson() throws Exception {
personService.save(new Person());
verify(personValidator, times(1)).validate(any(Person.class));
}
}

问题是在我运行测试时,personValidatorsstatusChangeValidators 为空。当测试中只有一个 @Spy 注释时,它工作正常。需要一些帮助才能知道我哪里做错了。

最佳答案

您的测试没有显示任何静态或 final 的模拟,所以我想知道您为什么使用 @RunWith(PowerMockRunner.class)

我已经获取了您的代码并成功运行它,只需进行一项更改:替换 @RunWith(PowerMockRunner.class)@RunWith(MockitoJUnitRunner.class) .

因此,除非您的测试的其他方面需要 PowerMock,那么我建议使用 MockitoJUnitRunner 运行您的测试用例。 。如果您的测试的某些方面需要 PowerMock 那么我建议注入(inject) statusChangeValidatorspersonValidators具有显式构造函数注入(inject)的实例(即 @JB Nizet 在上面的评论中建议的),这样您就不必依赖 @InjectMocks .

FWIW,有一个 open issue against PowerMock由于无法申请@InjectMocks对于带有 @Spy 的字段注释。

关于java - @Spy 在两个列表上注释时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46118316/

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