Spring Boot集成测试,@ Autowired的作品,@ Inject没有,为什么?

时间:2017-04-12 20:57:55

标签: spring-boot dependency-injection annotations autowired inject

我在Spring Boot应用程序上工作,我编写了一个服务,我想在集成测试中测试这个服务。因此,我想将服务注入我的测试中。如果我使用@Inject注释,则服务为空。如果我使用@Autowired,服务将获得Injected并且测试正常。我认为注释应该或多或少相同,唯一不同的是@Autowired如果没有bean可用则失败,因为它默认设置为required = true。服务有一个接口,我选择基于字段名称的实现

接口:

import org.springframework.core.io.ByteArrayResource;

import java.io.IOException;
import java.io.InputStream;
import java.util.Optional;

public interface FileService {

     boolean storeDicomZip(InputStream stream, long caseId);

  .
  . 
  .
  }

实现:

import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;

import java.io.*;
import java.nio.file.Files;
import java.util.Optional;

@Service
public class FileSystemFileService implements FileService {

 .
 .
 .
 }

和测试:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.IntegrationTest;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
public class FileSystemFileServiceTest {


    @Autowired
    private FileService fileSystemFileService;


    @Test
    public void storeDicomZip() throws Exception {
        InputStream stream = new ByteArrayInputStream("TEST".getBytes());
        fileSystemFileService.storeDicomZip(stream, 3);
        Assert.assertTrue(fileSystemFileService.getDicomZipVersions(3) == 1);
    }

    .
    . 
    .


}

如上所述,如果我使用@Autowired,就像这里一样,如果我使用@Inject则不会,因为fileSystemFileService为null。

有人知道为什么会这样,我必须改变使用@Inject吗?

0 个答案:

没有答案