java - 模拟在类级别创建的新对象
问题描述
我有一个 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);
}
}
解决方案
我同意这些评论——这段代码需要依赖注入,应该被修复。如果你真的想模拟字段,你可以使用 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); // ... }
推荐阅读
- angular - AWS Cognito Amplify 身份验证和 Angular UI 组件
- javascript - Webpack:如何解析驻留在 js 文件中的 html 模板?
- ms-word - 如何确定内容控件在 Word 文档中的位置
- javascript - POST 请求 Express JS 和强大的内部错误 500
- javascript - 每秒运行一次抛出:MongoError:拓扑已破坏
- python - 类型错误:
() 在使用 apply 后跟 groupby 时得到了一个意外的关键字参数“axis” - excel-formula - 如果函数 - 多个条件
- javascript - React Native 中音频进度条的实现
- java - 如何在 java 中为自定义 sha256 回合重现 php Crypt()
- tsql - T-SQL 替换函数缺少一些使用 nvarchar(max) 的匹配项