我有以下服务:
@Service
public class PlayerValidationService {
@Autowire
private EmailService emailService;
public boolean validatePlayerEmail(Player player) {
return this.emailService.validateEmail(player.getEmail());
}
现在,在我的junit测试课上,我正在使用使用PlayerValidationservice的其他第三服务:
public class junit {
@autowire PlayerAccountService playerAccountService ;
@Test
public test() {
this.playerAccountService .createAccount();
assertAllSortsOfThings();
}
在使用基于注释的自动启动时,是否可以在PlayerAccountservice中模拟电子邮件服务?(例如,使模拟不通过我们使用的常规电子邮件提供商检查电子邮件的验证)
谢谢。
有几种方法可以做到这一点。首先,最简单的选择是确保您的服务提供SeteMailService(电子邮件服务)方法。在这种情况下,您只需用自己的弹簧注射的实现。
@Autowired
private PlayerValidationService playerValidationService;
@Mock
private EmailService emailService;
@Before
public void setup() {
initMocks(this);
playerValidationService.setEmailService(emailService);
}
这种方法的缺点是,春季可能会创建全面的电子邮件服务的实例。假设您不希望发生这种情况,则可以使用"配置文件"。
在您的测试软件包中,创建一个仅在特定配置文件中活跃的配置类:
@Configuration
@Profile("mockemail")
public class MockEmailConfig {
@Bean(name = "emailService")
public EmailService emailService() {
return new MyDummyEmailService();
}
}
并在测试中添加注释以激活该配置文件:
@ActiveProfiles({ "mockemail" })
public class PlayerValidationServiceTest {
//...
}