[英]Assigning name to a org.springframework.core.io.Resource object
[英]How to mock org.springframework.core.io.Resource object?
在我的服务方法中,我依赖于org.springframework.core.io.Resource
参考,我想用下面的代码为服务方法之一编写一个测试用例
下面的代码如下:
@Service
public class EmailServiceImpl implements EmailService{
@Value("classpath:email_template.html")
private Resource emailTemplateResource;
private String getEmailTemplate() {
String template = null;
try {
template = new BufferedReader(new InputStreamReader(emailTemplateResource.getInputStream()))
.lines().collect(Collectors.joining("\n"));
} catch (IOException e) {
e.printStackTrace();
}
return template;
}
}
在这里,我无法在我的测试用例方法中模拟emailTemplateResource
object。 我尝试使用@Mock
和@Spy
,但每次我在emailTemplateResource
object 上收到 NullPointerException。
那么,模拟此emailTemplateResource
object 的正确方法是什么?
您可以在EmailServiceImpl
中进行构造函数注入。 这样,在您的模拟 class 创建EmailServiceImpl
时,您可以在构造函数中传递您自己的Resource
object 。
这种方法的开销是@InjectMocks
没有用,因为现在您在测试用例挂钩before
在自己的内部创建 object。
例子:
@RunWith(MockitoJUnitRunner.class)
public class EmailServiceImplTest{
EmailServiceImpl emailServiceImpl ;
Resource emailTemplateResource;
@Before
public void before() {
emailTemplateResource = //your impl here
emailServiceImpl = new EmailServiceImpl(resource);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.