一个模块的功能本身的实现需要依赖三方组件,在单元测试中通过完整的测试成本大。通过依赖注入的方式使得类与第三方组件进行解藕,从而可以专注于测试 类中的功能实现。
Example:
对于下载代码仓库的功能进行测试,代码库的下载依赖网络,也需要下载文件。而我们只想测试下载成功后的处理逻辑,这时候就可以对下载代码的逻辑类进行Mock完成测试。
Mock类的编写
class MockCode extends Code{
public MockCode(String address) {
super(address);
}
@Override
public void download(String url) {
}
@Override
public void download(String url, String username, String password) {
}
@Override
public void generateDuplicate() {
}
@Override
public String judgeLanguage() {
return "Java";
}
}
通过Mock类进行测试
@Test
public void should_download_github_java_code_success(){
Repo repo = new Repo(repoDtoOfGithub, "0");
assertTrue(repo.download(new MockCode(""), new RestTemplate()));
assertEquals(Repo.DOWNLOADED, repo.getDownloadStatus());
assertEquals("Java", repo.getLanguage());
}
通过上述做法,我们可以将类的测试与第三方组件解藕,测试成本更低。