测试覆盖率
测试覆盖率工具可以告诉哪些代码被测试覆盖了,哪些没有被测试到。理想状态下,应该是百分之百的代码覆盖率,这样我们才能确认自己的代码逻辑功能没有因为重构而破坏。通常IDE会提供相应的功能或者插件来提供测试覆盖率的检测功能,笔者使用的是IDEA开发工具,启用和设置测试覆盖率工具的方法见以下链接:
https://www.w3cschool.cn/intellij_idea_doc/intellij_idea_doc-nwur2fi9.html
如何解决测试依赖问题?
最常见的一个问题是:如果你在开发过程中需要使用JDBC访问数据库,你该如何测试?有三种测试方式可以满足你的要求:
- 使用Stub进行粗粒度的测试
- 使用mock objects进行测试
- 容器内测试
下面我们分别介绍一下这三种不同的测试方式。
使用Stub进行粗粒度测试
stub是一种机制,用来模拟真实代码或者尚未完成的代码所产生的的行为。因为stub需要模拟真实的系统,往往比较复杂,难以编写,并且本身也需要调试,所以stub的方式往往不是很推荐。例如,你需要和数据库交互,如果你需要做数据库stub,你需要模拟和数据库Client的交互,如获取连接,查询/更新数据,复杂性太高,将会抵消测试带来的优势。
使用mock objects进行测试
mocks替换了测试中与你方法协作的对象,从而提供一个隔离层。mocks并不实现任何逻辑,它们只是提供一种使测试能够控制仿造类的所有业务逻辑方法行为的空壳。由于mock objects是一个空壳,所以不至于出错,你也不必测试它们。下面我们以一个简单的例子进行介绍,是一个转账的服务,账户信息的定义如下:
[...]
public class Account {
private String accountId;
private long balance;
public Account(String accountId, long initialBalance) {
this.accountId = accountId;
this.balance = balance;
}
public void debit(long amount) {
this.balance -= amount;
}
public void credit(long amount) {
this.balance +=