繁体   English   中英

如何模拟 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM