Java 如何在jUnit的测试中使用@Autowired?

Java 如何在jUnit的测试中使用@Autowired?,java,spring,junit,Java,Spring,Junit,使用@BeforeClass和@Autowired运行测试时遇到问题。我在运行测试时使用H2数据库,并希望在运行每个测试方法之前保留一个列表。然而,我得到了空指针。有人能帮我吗 Segue minha classe de teste: @RunWith(SpringRunner.class) @DataJpaTest public class TestaContaRepository { @Autowired private static TerritorioRepresenta

使用
@BeforeClass
@Autowired
运行测试时遇到问题。我在运行测试时使用H2数据库,并希望在运行每个测试方法之前保留一个列表。然而,我得到了空指针。有人能帮我吗

Segue minha classe de teste:

@RunWith(SpringRunner.class)
@DataJpaTest
public class TestaContaRepository {
    @Autowired
    private static TerritorioRepresentanteRepository representanteRepository;

    @BeforeClass
    public static void setup() {
        Conta c1 = new Conta();
        c1.setTipo(Tipo.CONTA);
        c1.setNome("XPTO");

        Conta c2 = new Conta();
        c2.setTipo(Tipo.CONTA);
        c2.setNome("FOO");

        Conta c3 = new Conta();
        c3.setTipo(Tipo.CONTATO);
        c3.setNome("BAA");

        Conta c4 = new Conta();
        c4.setTipo(Tipo.CONTA);
        c4.setNome("DAA");

        TerritorioRepresentante tr1 = new TerritorioRepresentante();
        tr1.setId(1L);
        tr1.setContas(Arrays.asList(c1, c2));

        TerritorioRepresentante tr2 = new TerritorioRepresentante();
        tr2.setId(2L);
        tr2.setContas(Arrays.asList(c2, c3, c4));

        TerritorioRepresentante tr3 = new TerritorioRepresentante();
        tr3.setId(3L);
        tr3.setContas(Arrays.asList(c1, c2, c3, c4));

        List<TerritorioRepresentante> territorios = Arrays.asList(tr1, tr2, tr3);
        representanteRepository.saveAll(territorios);
    }

@Test
public void quando_BuscarPorContasDoRepresentante_RetornarListaDeContasPaginada() {

     ...

}
@RunWith(SpringRunner.class)
@DataJpaTest
公共类遗嘱保留{
@自动连线
私人的静态领土代表;
@课前
公共静态无效设置(){
Conta c1=新Conta();
c1.setTipo(Tipo.CONTA);
c1.设定名称(“XPTO”);
Conta c2=新Conta();
c2.setTipo(Tipo.CONTA);
c2.setNome(“FOO”);
Conta c3=新Conta();
c3.setTipo(Tipo.CONTATO);
c3.setNome(“BAA”);
Conta c4=新Conta();
c4.setTipo(Tipo.CONTA);
c4.setNome(“DAA”);
TerritorioRepresentante tr1=新TerritorioRepresentante();
tr1.setId(1L);
tr1.setContas(Arrays.asList(c1,c2));
TerritorioRepresentante tr2=新TerritorioRepresentante();
tr2.setId(2L);
tr2.setContas(Arrays.asList(c2,c3,c4));
TerritorioRepresentante tr3=新TerritorioRepresentante();
tr3.setId(3L);
tr3.setContas(Arrays.asList(c1、c2、c3、c4));
List territorios=Arrays.asList(tr1、tr2、tr3);
代表性地址。保存所有(地域);
}
@试验
公共无效的权利和义务{
...
}
您“无法”从静态字段创建对象

编辑:正如朋友“莱尔塞尔迪罗”正确指出的那样,我应该稍微详细说明一下

@Autowire注释用于在构造bean(对象)之后,在调用任何配置方法之前插入字段。因此,您希望Spring容器负责对象创建,因此只能“连接”它们

如果要“连接”一个静态对象,那么@autowire的用途就有点失败了,因为一旦开始使用静态方法,就不再需要创建对象的实例

当我说你不能很好地…技术上你可以,但重点是什么呢+它可能被记录为一个bug,例如:

@Component
public class Foo{

    private static Test t;

    @Autowired
    public void setTest(Test test) {
        Foo.t = test;
    }
}
您“无法”从静态字段创建对象

编辑:正如朋友“莱尔塞尔迪罗”正确指出的那样,我应该稍微详细说明一下

@Autowire注释用于在构造bean(对象)之后,在调用任何配置方法之前插入字段。因此,您希望Spring容器负责对象创建,因此只能“连接”它们

如果要“连接”一个静态对象,那么@autowire的用途就有点失败了,因为一旦开始使用静态方法,就不再需要创建对象的实例

当我说你不能很好地…技术上你可以,但重点是什么呢+它可能被记录为一个bug,例如:

@Component
public class Foo{

    private static Test t;

    @Autowired
    public void setTest(Test test) {
        Foo.t = test;
    }
}

@Lealcelderio是这样;)-我提交后才注意到您的答案。@Lealcelderio,谢谢大家的帮助。我仍然不知道如何调整我的代码。请看,我正在运行测试,在运行任何方法之前,我需要将一些记录写入H2数据库(内存中)。由于此代码段只应运行一次,我用
@BeforeClass
写下了该方法。使用此注释时,我被迫将该方法转换为静态。从这里开始,我还需要更改
私有静态Territory或PresentIntereposito的行
私有静态Territory RepresentReaderRepository;
ry RepRepRepository;
如何执行此测试?@Lealcelderio right so;)-在我提交后才注意到您的答案。@Lealcelderio,谢谢大家的帮助。我仍然不明白如何调整代码。请看,我正在运行测试,在运行任何方法之前,我需要将一些记录写入H2数据库(内存中)。由于此代码段只应运行一次,我用
@BeforeClass
写下了该方法。使用此注释时,我被迫将该方法转换为静态。从这里开始,我还需要更改
私有静态Territory或PresentIntereposito的行
私有静态Territory RepresentReaderRepository;
repreprepository;
如何执行此测试?