elh*_*oim 0 java testing algorithm code-coverage
存在一些允许计算一组测试的路径覆盖率的工具,但是是否有一个工具(或算法)可以建议值以尽可能少的测试获得最佳路径覆盖?
例如,使用以下类:
public class User {
private boolean isAdmin = false;
private String name;
private String password;
public User(String name, String password, boolean isAdmin) {
this.name = name;
this.password = password;
this.isAdmin = isAdmin;
}
public boolean isAdmin() {
return isAdmin;
}
public boolean authenticate(String name, String password) {
if (name.equals(this.name) && password.equals(this.password)) {
return true;
} else {
return false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
public class DataRepository {
List<String> data = new ArrayList<String>();
public void add(String dataPiece) {
data.add(dataPiece);
}
public void clearAll(User userAuthenticated) {
if (userAuthenticated.isAdmin()) {
data.clear();
}
}
public void addAll(User userAuthenticated, List<String> collection) {
if (userAuthenticated.isAdmin()) {
data.addAll(collection);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我创建它使用一个测试,我会得到一个更好的测试覆盖用户与isAdmin的真实.
是否有一个工具可以提及:如果您使用isAdmin为true的用户创建测试,您将获得最佳测试覆盖率.
类似的东西,但对于更复杂的情况,并检查所有代码分支.
你在谈论什么"价值观"暗示?
代码覆盖通过检查在特定会话期间执行哪些行/方法/类等来工作.这通常在运行自动化单元测试时使用,但不一定是这样(例如,您可以在部署Web应用程序之前进行烟雾测试,以了解您在特定测试中未涵盖的代码路径) .
增加覆盖范围的方法只是确保在正在测量的任何内容(例如单元测试)的上下文中,使用执行更多内部分支的参数调用更多方法.没有工具是要确切地告诉你写什么要做到这一点-他们强调什么还没有经过测试,它是由你来编写测试,将这样做.
除非您的问题是"哪种覆盖工具为覆盖率提供了最高的测量值",否则在评估适用性时这是一个不好的标准.
编辑 - 您还需要意识到测试的目标不是获得良好的覆盖率.代码覆盖率仅用于显示哪些代码绝对未经过测试.一个类仍然可以有100%的覆盖率而没有任何有用的测试(例如,没有任何断言的那些 - 或更常见的是,其断言也通过一些失败值的那些).
因此,如果您只是为了获得覆盖而编写测试,那么您的测试将是垃圾并且不会给您任何东西.编写测试最初只考虑类的功能,只有当你想到"我已经完成"时,才能通过覆盖工具运行它.使用该工具的输出可以查看尚未执行的代码块,这可能表明您需要编写更多传递不同输入的测试.最重要的是,在编写测试时,始终要确定您正在测试的是什么以及哪些输出应该构成通过和失败.
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |