Java JUnit测试的模拟JNDI数据源

Java JUnit测试的模拟JNDI数据源,java,junit,jndi,junit5,Java,Junit,Jndi,Junit5,我试图将JNDI数据源模拟到JUnit测试中,但由于某些原因,它无法工作: 我使用这些导入: import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import java.io.IOException; import java.util.ArrayLis

我试图将JNDI数据源模拟到JUnit测试中,但由于某些原因,它无法工作:

我使用这些导入:

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;    
import javax.activation.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.xml.bind.JAXBException;    
import org.junit.BeforeClass;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@SpringBootTest(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class BinCountryCheckFilterImplTest    {

    ..........

    @MockBean
    private static DataSource dataSource;

    @BeforeClass
    public static void setupJndi() throws Exception {
        SimpleNamingContextBuilder.emptyActivatedContextBuilder();
        Context context = new InitialContext();
        context.bind("java:global/production_gateway", dataSource);
    }

    @BeforeEach
    public void beforeEachTest() throws IOException {    
        ........          
    }

    @Test
    public void testBinCountryCheckFilterImpl(){
    .....

}
有办法解决这个问题吗?
您是否看到导入的软件包存在一些问题?我需要使用JUnit5。

问题是您将JUnit4与JUnit5混合使用@RunWith和@BeforeClass来自JUnit4,@BeforeClass来自Jupiter@根据导入情况,测试可能来自其中一个


如果在安装程序开始工作之前将@beforeach替换为@beforeach;至少你会更接近工作。确保所有导入都来自org.junit或org.junit.jupiter.api

实际上,您的示例代码看起来还是一样的,这意味着它肯定是错误的。请把它清理干净,把所有进口的东西都拿出来。然后我们可以寻找其他问题。我添加了导入的包。这表明您的测试是使用JUnit 5 Jupiter运行的,因此ˋ@RunWithˋ和ˋ@BeforeClassˋ注释被忽略。所以任何依赖于Spring引导测试魔法的东西——比如ˋ@MockBeanˋ——都不起作用。如答案中所述解决该问题,然后我们可以看到行为如何变化。