首页 > 解决方案 > 模拟在类级别创建的新对象

问题描述

我有一个 SenderService 类,如下所示。

我正在使用 restTemplate 对象来调用 url。我应该如何只使用 Mockito 来为此编写一个 junit 测试?

我已经尝试为我的班级创建一个间谍,但它不起作用

@Service
public class SenderServiceImpl implements SenderService{

    @Autowired
    private Logger logger;

    private RestTemplate restTemplate = new RestTemplate();

     @Override
    public void sendNotification(SenderNotification notification) {
        try {
            HttpEntity sendRequestBody = new HttpEntity<> 
            (notification,headers);
            response = 
            restTemplate.postForEntity(url,sendRequestBody,String.class); 
     }
}

标签: javamockito

解决方案


我同意这些评论——这段代码需要依赖注入,应该被修复。如果你真的想模拟字段,你可以使用 PowerMock 或这个问题的解决方案: Mockito: Mock private field initialization

Mockito 带有一个帮助类来为您节省一些反射样板代码:

import org.mockito.internal.util.reflection.Whitebox;

//...

@Mock
private Person mockedPerson;
private Test underTest;

// ...

@Test
public void testMethod() {
    Whitebox.setInternalState(underTest, "person", mockedPerson);
    // ...
}

推荐阅读