我正在尝试测试Spring @Repository
组件,但首先我要注入表名以使其正常工作。
这就是我所做的。这很简单DAO:
@Repository
@Transactional
public class AccountDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
private String table = "accounts"; <-- I need to inject this value from tests
...
}
单元测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-web-servlet.xml")
@Transactional
public class AccountDaoTest {
@Autowired
private AccountDAO accountDAO;
@Before
public void init() {
accountDAO = Mockito.spy(accountDAO);
ReflectionTestUtils.setField(accountDAO, "table", "accounts_test");
}
...
}
问题是ReflectionTestUtils
忽略了字段分配,accountDAO
仍然使用accounts
表名值而不是accounts_test
。
如何解决这个问题?
答案 0 :(得分:0)
您还可以为table
字段定义一个setter方法:
protected void setTable(String pTableName)
this.table = pTableName;
}
并在测试类before()
方法中调用setter。