简体   繁体   English

JUnit 测试的模型 JNDI 数据源

[英]Mockup JNDI datasource for JUnit test

I'm trying to mockup JNDI datasource into JUnit test but for some reason it's not working:我正在尝试将 JNDI 数据源模拟到 JUnit 测试中,但由于某种原因它不起作用:

I use these imports:我使用这些进口:

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(){
    .....

}

Is there some way to solve this?有没有办法解决这个问题? Do you see some issues with the imported packages?您是否看到导入的软件包有一些问题? I need to use JUnit5.我需要使用 JUnit5。

The problem is that you are mixing JUnit 4 with JUnit 5 aka Jupiter.问题是您将 JUnit 4 与 JUnit 5 aka Jupiter 混合在一起。 @RunWith and @BeforeClass are from JUnit 4, @BeforeEach is from Jupiter; @RunWith 和 @BeforeClass 来自 JUnit 4,@BeforeEach 来自木星; @Test might be from either depending on the import. @Test 可能来自任何一个,具体取决于导入。

If you replace @BeforeEach with @Before your setup could work;如果您将@BeforeEach 替换为@Before,您的设置就可以工作; at least you'll be closer to something working.至少你会更接近一些工作。 Make sure that all your imports are either from org.junit or from org.junit.jupiter.api确保您的所有导入来自 org.junit 或来自 org.junit.jupiter.api

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM