Java JUnit4-@Autowired服务在@Before注释方法中为空

Java JUnit4-@Autowired服务在@Before注释方法中为空,java,unit-testing,junit,junit4,autowired,Java,Unit Testing,Junit,Junit4,Autowired,我有一个JUnit测试,如下所示: @RunWith(JUnitParamsRunner.class) public class ProcessnDbUnitTest extends DbunitTestParent { @Autowired private ProcessRepositiory pr; private static List<Object[]> allProcessIds = new ArrayList<>(); p

我有一个JUnit测试,如下所示:

@RunWith(JUnitParamsRunner.class)
public class ProcessnDbUnitTest extends DbunitTestParent {

    @Autowired
    private ProcessRepositiory pr;

    private static List<Object[]> allProcessIds = new ArrayList<>();

    private static Object[][] result = new Object[allPDRIds.size()][];

    private static List<Process> process = new ArrayList<>();

    @Before
    public void before() {
        processes = pr.findAll();
        pr.findAll().stream().forEach(process -> allProcessIds.add(new Object[] { process.getId() }));
        result = new Object[allProcessIds.size()][];
    }
在这种情况下,测试本身并不重要。这些字段是静态的,因为
@Before
方法正在获取用于参数化测试的内容


调试测试时,我看到在
before()
方法中,autowired
ProcessRepository
为空。奇怪的是,在另一个非常相似的测试中,一切都正常。。。为什么会发生这种情况?

类aka bean set Autowired注释需要Spring上下文来初始化和管理,如果要使用此注释,应该使用SpringJUnit4ClassRunner,如果没有,您可以使用Mockito来模拟它

假设您引用的是Spring的Autowired注释,那么您需要在testsOk中的某个地方初始化Spring上下文。这对我有点帮助,但现在我有另一个问题。我正在处理的大多数测试(我不是编写它们的人)都需要三个
@RunWith
注释类来运行。第一个:
SpringJUnit4ClassRunner.class
,第二个
Suite.class
,第三个:
JUnitParamsRunner.class
。基本构造是:
类Test1扩展了UnitParent
<代码>测试1用
@RunWith(SpringJunit4ClassRunner.class)注释。UnitParent用
@RunWith(Suite.class)`注释,并扩展了
AbstractTransactionalJUnit4SpringContextTests
。我不知道把JUnitParamsRunner.class放到哪里才能让它工作:(@dziki您使用的
@Runwith(JUnitParamsRunner.class)
@ContextConfiguration(classes=JavaConfig.class)
在进程ndbunitest上
Java导入org.springframework.context.annotation.ComponentScan;导入org.springframework.context.annotation.Configuration;@Configuration@ComponentScan公共类JavaConfig{}
是的,我使用过它,它似乎适用于大多数测试用例,但是,我有一些参数化的测试用例,这会导致问题。我使用的是
junitparams
,我创建了一个静态方法来准备数据,但是数据应该从数据库中获取,因此我创建了一个
@Before
注释方法:`@Before public void Before(){pdr.findAll().stream().forEach(content->allPDRIds.add(new Object[]{content.getId());result=new Object[allPDRIds.size()][];}`其中pdr是jpa回购协议,allPDRIds是静态列表,结果是静态obj
@ContextConfiguration(classes = DbUnitApplication.class)
@RunWith(Suite.class)
@SuiteClasses({UserDbUnitTest.class, ProcessDbUnitTest.class })
public class DbunitTestParent extends AbstractTransactionalJUnit4SpringContextTests {

    @PersistenceContext
    private EntityManager em;

    @After
    public final void flush() {
        em.flush();
    }

}