Java 为测试注入不同的实现
我有以下课程:Java 为测试注入不同的实现,java,spring,testing,dependency-injection,Java,Spring,Testing,Dependency Injection,我有以下课程: public interface Emailer {} @Named public class RealEmailer implements Emailer {} @Named public class NoOpEmailer implements Emailer {} 我的服务类使用的是真正的emailer: public class SomeService { @Inject private Emailer emailer; } 问题是,在我的
public interface Emailer {}
@Named
public class RealEmailer implements Emailer {}
@Named
public class NoOpEmailer implements Emailer {}
我的服务类使用的是真正的emailer:
public class SomeService {
@Inject
private Emailer emailer;
}
问题是,在我的服务测试类(
SomeServiceTest
)中,如何在服务中注入Emailer
,以使用NoOpEmailer
?我将Spring用于DI框架。您是否考虑过将字段包作用域设置为私有而非私有的可能性,因为这将使在单元测试期间设置此字段变得更加简单(假设您的测试类与主题位于同一个包中)
如果没有,Spring似乎可以这样做,您可以使用它将此值注入类中您是否考虑过将字段包范围设置为私有而不是私有的可能性,因为这将使在单元测试期间设置此字段变得简单得多(假设您的测试类与主题位于同一个包中)
如果没有,那么Spring似乎就是这样做的,如果可以使用Spring 3.1,您可以使用Spring将该值注入到类中。这将允许您提供同一bean的两种不同实现(Emailer和NoOpEmailer)。然后在您的测试中,您可以使用@Profile(“test”)注释来激活测试配置文件,并且您的no-op bean将被注入。如果您可以使用Spring 3.1,您可以使用。这将允许您提供同一bean的两种不同实现(Emailer和NoOpEmailer)。然后在您的测试中,您可以使用@Profile(“test”)注释来激活测试概要文件,您的no-op bean将被注入。您希望使用什么依赖注入框架?用GUICE做它不同于Spring,不同于…对不起,我用的是Spring。我应该把它放在问题里。但是它被标记为
spring
。您想使用什么依赖注入框架?用GUICE做它不同于Spring,不同于…对不起,我用的是Spring。我应该把它放在问题里。但它的标签是spring
。