嘲笑服务中的服务(JUNIT)



我有以下服务:

@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 {
    //...
}

相关内容

  • 没有找到相关文章