【发布时间】:2020-01-19 23:57:39
【问题描述】:
我正在尝试测试我的 DAO 类,它有 2 个依赖项,dataSource 和 stringCrypto
但应用程序不断抛出
Failed to obtain JDBC Connection: DataSource returned null from getConnection(): dataSource
我试图模拟的数据源依赖项是一个使用 JndiDataSourceLookUp 的 bean
这是
@Bean
public DataSource dataSource() {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
dataSourceLookup.setResourceRef(true);
DataSource dataSource = dataSourceLookup.getDataSource("castle/db");
return dataSource;
}
这是 DAO 类
public class PersonDAOImpl implements PersonDAO {
@Autowired
private DataSource dataSource;
@Autowired
private Cryptography stringCrypto;
private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
@Override
public List<Member> getAllMembers() {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
try {
List<Member> members = namedParameterJdbcTemplate.query(SqlStatement.GET_ALL_MEMBERS,
new MemberExtractor());
return members;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
正如你在这个类中看到的,它有 2 个依赖项,我试图在下面的测试类中模拟它们
@RunWith(SpringRunner.class)
public class MembersControllerTest {
@Mock
DataSource dataSource;
@Mock
Cryptography stringCrypto;
@InjectMocks
PersonDAOImpl personDAOImpl;
@BeforeEach
void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
assertTrue(personDAOImpl.getAllMembers().size() > 0);
}
}
我尝试添加
@PostConstruct
private void initialization() {
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
但它不起作用,每当我运行我的测试时,它都会抛出无法获取 jdbc 连接。 抛出的异常根本没有帮助,所有其他类似的问题都是关于使用 xml 配置的,并且接受的答案是建议一些 xml 配置,老实说,我真的不明白,我什至不想在我的应用。 我真的搜索了几乎所有相关的问题,但没有发现任何有用的问题,所以我决定问它。
提前致谢
【问题讨论】:
-
您好,请尝试以下链接stackoverflow.com/questions/5940895/…
-
@ArunPrasat 你好,我已经阅读了这个问题,不过还是谢谢你。
标签: java spring unit-testing mocking mockito