【问题标题】:Spring 4.07 Junit Test and AutowiredSpring 4.07 Junit 测试和 Autowired
【发布时间】:2014-11-04 21:02:02
【问题描述】:

您好,我正在使用 Spring 和 CDI。 在我的单元测试中,我想测试一个使用 @Autowired 注释的类。 问题是如果我创建这个类的一个实例并调用一个方法,所有带注释的对象都是空的。 在基本的注释工作。只是我的单元测试没有

这是我的单元测试。在这里 Autowired 工作。在我的测试中,我创建了一个 DemoConsumerBean.class 的实例并在这里调用方法 requestJobsFromPublishedJobsApi 我还有一些 Autowired 声明。问题是所有实例都是空的!

@RunWith(SpringJUnit4ClassRunner.class)
@ActiveProfiles("development")
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class, FirstbirdTestExecutionListener.class, FlywayTestExecutionListener.class })
@ContextConfiguration(locations = { "classpath:hibernate-spring.xml" })
@FlywayTest
public class DemoConsumerBeanTest extends AbstractJUnit4SpringContextTests {

@Autowired
private CustomerManager customerManager;

@Autowired
private DemoDetailsManager demoDetailsManager;

@Before
public void setup() {
    CamelContext context = new DefaultCamelContext();
    exchange = new DefaultExchange(context);
}

@Test
public void requestJobsFromPublishedJobsApiTest() throws NoSuchDataException {
    DemoConsumerBean demoConsumerBean = new DemoConsumerBean();

    customer = new Customer();
    customer.setCustomerId(15);

    customer = customerManager.getCustomerById(customer);

    // This one works
    DemoDetails demoDetails = demoDetailsManager.getDemoDetailsByCustomerId(customer);

    demoConsumerBean.requestJobsFromPublishedJobsApi(exchange, customer);

    PublishedJobs apiJobs = exchange.getIn().getBody(PublishedJobs.class);

    assertNotNull(apiJobs);

}

}

public class DemoConsumerBean {

@Autowired
protected CustomerManager customerManager;
@Autowired
protected DemoDetailsManager demoDetailsManager;
@Autowired
protected MessageLogManager messageLogManager;

public void requestJobsFromPublishedJobsApi(Exchange exchange, Customer customer) throws NoSuchDataException {
    //this one is null!
    DemoDetails demoDetails = demoDetailsManager.getDemoDetailsByCustomerId(customer);
    PublishedJobs jobs = null;

    if (demoDetails == null || StringUtils.isBlank(demoDetails.getDemoApiUrl())) {
        throw new NoSuchDataException("No demo data found for customer " + customer.getCustomerFirstbirdId());
    }
....
}   

}

【问题讨论】:

    标签: java spring junit junit4 autowired


    【解决方案1】:

    new DemoConsumerBean(); 中使用new 会绕过弹簧,这是您的问题。

    要么使用 spring 中的 DemoConsumerBean 实例(即在测试中自动装配),要么在测试中添加设置器并使用它们在 DemoConsumerBean 中“手动自动装配”:

    @Test
    public void requestJobsFromPublishedJobsApiTest() throws NoSuchDataException {
        DemoConsumerBean demoConsumerBean = new DemoConsumerBean();
        demoConsumerBean.setCustomerManager(this.customerManager)
        // etc
    

    部分阅读:Spring framework reference - The IoC container

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2016-11-30
      相关资源
      最近更新 更多