AbstractTestNGSpringContextTests с областью прототипа - PullRequest
0 голосов
/ 25 ноября 2018

Поддерживает ли AbstractTestNGSpringContextTests пружинные области?Я пытаюсь установить область действия прототипа для своего класса, но продолжаю получать один и тот же экземпляр из разных потоков (например, "singleton")

Мой класс конфигурации:

@Configuration
@ComponentScan
@PropertySource("classpath:/sut/${env}")
public class TestConfig {

    @Autowired
    private Environment env;

    @Bean
    public ZookeeperDriver zookeeper() throws Exception {
        return new ZookeeperDriver(env.getProperty("zookeeper.host"), env.getProperty("zookeeper.internalIp"));
    }

    @Bean
    public UserAgent userAgent() throws Exception {
    return new UserAgent(env.getProperty("userAgent.europeAgentIp"), 
    env.getProperty("userAgent.europeAgentIp2"), 
    env.getProperty("userAgent.apacAgentIp"),
            env.getProperty("userAgent.useastAgentIp"), 
    env.getProperty("userAgent.uswestAgentIp"),
            env.getProperty("userAgent.stabilityAgentIp"), 
    env.getProperty("userAgent.parisAgentIp"));
    }

    @Bean
    public IpSecUserAgent ipSecUserAgent() throws Exception {
        return new IpSecUserAgent(env.getProperty("ipSecUserAgent.amsAgentIp"), env.getProperty("ipSecUserAgent.amsAgentIntIp"),
                env.getProperty("ipSecUserAgent.svAgentIp"), env.getProperty("ipSecUserAgent.svAgentIntIp"));
    }

    @Bean()
    public IpSecGateway ipSecGateway() throws Exception {
        return new IpSecGateway(env.getProperty("ipSecGateway.amsGatewayIp"),
                env.getProperty("ipSecGateway.amsGatewayIntMask"),
                env.getProperty("ipSecGateway.svGatewayIp"),
                env.getProperty("ipSecGateway.svGatewayIntMask"),
                env.getProperty("ipSecGateway.svGatewayIp2"),
                env.getProperty("ipSecGateway.svGatewayIntMask2"));
    }
}

Мой класс

    @Component
    @Scope("prototype")
    public class IpSecGateway extends UserAgent {

        private GatewayHost amsGw;
        private GatewayHost svGw;
        private GatewayHost svGw2;
        private List<GatewayHost> gatewayHosts = new ArrayList<>();
        String message;

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public IpSecGateway(String amsGatewayIp, String amsGatewayIntMask,
                            String svGatewayIp, String svGatewayIntMask, String svGatewayIp2,
                            String svGatewayIntMask2 ) throws Exception {
            super("");
            this.amsGw = new GatewayHost("ams", amsGatewayIp, amsGatewayIntMask);
            this.svGw = new GatewayHost("sv", svGatewayIp, svGatewayIntMask);
            this.svGw2 = new GatewayHost("sv2", svGatewayIp2, svGatewayIntMask2);
            gatewayHosts.add(amsGw);
            gatewayHosts.add(svGw);
            gatewayHosts.add(svGw2);
        }

        public GatewayHost getAmsGw() {
            return amsGw;
        }

        public void setAmsGw(GatewayHost amsGw) {
            this.amsGw = amsGw;
        }

        public GatewayHost getSvGw() {
            return svGw;
        }

        public void setSvGw(GatewayHost svGw) {
            this.svGw = svGw;
        }

        public GatewayHost getSvGw2() {
            return svGw2;
        }

        public void setSvGw2(GatewayHost svGw2) {
            this.svGw2 = svGw2;
        }

        public List<GatewayHost> getGatewayHosts() {
            return gatewayHosts;
        }

        public void setGatewayHosts(List<GatewayHost> gatewayHosts) {
            this.gatewayHosts = gatewayHosts;
        }
    }

Инъекция в базовом классе:

@ContextConfiguration(classes = TestConfig.class)
@Listeners({HtmlReporter.class, SlackDriver.class})
public class BaseTest extends AbstractTestNGSpringContextTests {
    @Autowired
    protected IpSecUserAgent ipSecUserAgent;
    @Autowired
    protected IpSecGateway ipSecGateway;

}

Когда я пытаюсь вызвать экземпляр ipsecGateway из разных потоков - я получаю один и тот же экземпляр каждый раз (например, getMessage)

1 Ответ

0 голосов
/ 25 ноября 2018

Добавить ActiveProfiles в TestConfig с соответствующим профилем

 @ActiveProfiles(profiles = { "testing" })

ActiveProfiles - это аннотация уровня класса, используемая для объявления, какие профили определения активных компонентов должны бытьиспользуется при загрузке ApplicationContext для тестовых классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...