JUnit& Mockito:如何将字段值注入Spring组件?

时间:2015-09-13 11:13:30

标签: java spring spring-mvc junit mockito

我正在尝试测试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

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您还可以为table字段定义一个setter方法:

protected void setTable(String pTableName) this.table = pTableName; }

并在测试类before()方法中调用setter。