【发布时间】:2015-01-28 17:59:47
【问题描述】:
我正在为 Spring Core 认证而学习,我对在 JUnit 测试中使用 profiles 有一些疑问。
所以我知道,如果我用以下方式注释一个类:
@Profile("stub")
@Repository
public class StubAccountRepository implements AccountRepository {
private Logger logger = Logger.getLogger(StubAccountRepository.class);
private Map<String, Account> accountsByCreditCard = new HashMap<String, Account>();
/**
* Creates a single test account with two beneficiaries. Also logs creation
* so we know which repository we are using.
*/
public StubAccountRepository() {
logger.info("Creating " + getClass().getSimpleName());
Account account = new Account("123456789", "Keith and Keri Donald");
account.addBeneficiary("Annabelle", Percentage.valueOf("50%"));
account.addBeneficiary("Corgan", Percentage.valueOf("50%"));
accountsByCreditCard.put("1234123412341234", account);
}
public Account findByCreditCard(String creditCardNumber) {
Account account = accountsByCreditCard.get(creditCardNumber);
if (account == null) {
throw new EmptyResultDataAccessException(1);
}
return account;
}
public void updateBeneficiaries(Account account) {
// nothing to do, everything is in memory
}
}
我声明了一个属于 stub 配置文件的 服务 bean。
所以,如果我的 测试类 是这样的:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes=TestInfrastructureConfig.class)
@ActiveProfiles("stub")
public class RewardNetworkTests {
.....................................
.....................................
.....................................
}
这意味着它将使用属于 stub 配置文件的 bean bean 和没有配置文件的 bean。是对的还是我错过了什么?
如果在一个类(其实例将是 Spring bean)上使用 @ActiveProfiles 注释我在 Java 配置类上使用它会发生什么?
类似的东西:
@Configuration
@Profile("jdbc-dev")
public class TestInfrastructureDevConfig {
/**
* Creates an in-memory "rewards" database populated
* with test data for fast testing
*/
@Bean
public DataSource dataSource(){
return
(new EmbeddedDatabaseBuilder())
.addScript("classpath:rewards/testdb/schema.sql")
.addScript("classpath:rewards/testdb/test-data.sql")
.build();
}
}
具体是做什么的?我认为在这个类中配置的所有 bean 都将属于 jdbc-dev 配置文件,但我不确定。你能给我更多关于这件事的信息吗?
为什么我必须在 **configuration class* 上使用 @Profile 注释而不是直接注释我的 bean?
Tnx
【问题讨论】:
标签: java spring annotations spring-annotations spring-profiles