我有以下课程:
public interface Emailer {}
@Named
public class RealEmailer implements Emailer {}
@Named
public class NoOpEmailer implements Emailer {}
我的服务类使用真实的电子邮件:
public class SomeService {
@Inject
private Emailer emailer;
}
问题是,在我的服务测试类(SomeServiceTest
)中,如何在服务中注入Emailer
以使用NoOpEmailer
?我正在使用Spring作为DI框架。
答案 0 :(得分:3)
如果您可以使用Spring 3.1,则可以使用Profiles。这将允许您提供同一个bean的两个不同实现(Emailer和NoOpEmailer)。然后在测试中,您可以使用@Profile(“test”)注释来激活测试配置文件,并且将注入无操作bean。
答案 1 :(得分:1)
您是否考虑过制作字段包范围而非私有的可能性,因为这会使您在单元测试期间设置此字段变得更加简单(假设您的测试类与主题位于同一个包中)。
如果没有,它似乎用Spring执行此操作,您可以使用ReflectionTestUtils#setField(Object target, String name, Object value)
将此值注入您的类