TestNG:没有参数的测试方法
TestNG: Test method without arguments
是时候写我的第一个测试了。我对此非常兴奋,但我被困住了。我有方法,应该验证安装的 Java 版本
public static boolean verifyJavaVersion() throws UserException {
if (System.getProperty("java.version") != null) {
String[] javaProperty = System.getProperty("java.version").substring(2, System.getProperty("java.version").length()).split("\.");
int installedJavaVersion = Integer.parseInt(javaProperty[0]);
int installedJavaReleaseVersion = Integer.parseInt(javaProperty[1].substring(2, javaProperty[1].length()));
if (installedJavaVersion != REQUIRED_JAVA_VERSION || installedJavaReleaseVersion < MINIMUM_JAVA_RELEASE_VERSION)
throw new UserException("Java version is not correct. Required Java version "
+ REQUIRED_JAVA_VERSION + ", release " + MINIMUM_JAVA_RELEASE_VERSION + " or higher");
return true;
}
throw new UserException("Java version not found");
}
我在那里有 2 个变量,它们都是 private static final
,所以,如您所见,此方法中没有参数。我该如何测试这个方法,我应该测试任何期望改变这 2 个变量的东西吗?
我想创建 public getter 和 setter 来测试这些变量,但这是好的做法吗?
意识到编写测试很难,通常意味着可以改进代码。对我来说,这是编写测试的最大原因之一:它们迫使您编写更好的代码!
如果您查看您的代码片段,它实际上做了几件事:
- 获取版本系统属性,可能抛出异常
- 它提取两个版本并转换为整数
- 然后比较它们
考虑到这一点时,您会发现这可以拆分为几个功能。而且它们可以更容易地进行测试。
public static boolean verifyJavaVersion() throws UserException {
String javaVersion = ...
int installedJavaVersion = extractJavaVersion(javaVersion);
int installedJavaReleaseVersion = extractJavaReleaseVersion(javaVersion);
checkVersion(installedJavaVersion, REQUIRED_JAVA_VERSION, installedJavaReleaseVersion, MINIMUM_JAVA_RELEASE_VERSION);
}
其中每一项都应该很容易测试。
为了简单起见,我删除了你的空检查,但你明白了。
是时候写我的第一个测试了。我对此非常兴奋,但我被困住了。我有方法,应该验证安装的 Java 版本
public static boolean verifyJavaVersion() throws UserException {
if (System.getProperty("java.version") != null) {
String[] javaProperty = System.getProperty("java.version").substring(2, System.getProperty("java.version").length()).split("\.");
int installedJavaVersion = Integer.parseInt(javaProperty[0]);
int installedJavaReleaseVersion = Integer.parseInt(javaProperty[1].substring(2, javaProperty[1].length()));
if (installedJavaVersion != REQUIRED_JAVA_VERSION || installedJavaReleaseVersion < MINIMUM_JAVA_RELEASE_VERSION)
throw new UserException("Java version is not correct. Required Java version "
+ REQUIRED_JAVA_VERSION + ", release " + MINIMUM_JAVA_RELEASE_VERSION + " or higher");
return true;
}
throw new UserException("Java version not found");
}
我在那里有 2 个变量,它们都是 private static final
,所以,如您所见,此方法中没有参数。我该如何测试这个方法,我应该测试任何期望改变这 2 个变量的东西吗?
我想创建 public getter 和 setter 来测试这些变量,但这是好的做法吗?
意识到编写测试很难,通常意味着可以改进代码。对我来说,这是编写测试的最大原因之一:它们迫使您编写更好的代码!
如果您查看您的代码片段,它实际上做了几件事:
- 获取版本系统属性,可能抛出异常
- 它提取两个版本并转换为整数
- 然后比较它们
考虑到这一点时,您会发现这可以拆分为几个功能。而且它们可以更容易地进行测试。
public static boolean verifyJavaVersion() throws UserException {
String javaVersion = ...
int installedJavaVersion = extractJavaVersion(javaVersion);
int installedJavaReleaseVersion = extractJavaReleaseVersion(javaVersion);
checkVersion(installedJavaVersion, REQUIRED_JAVA_VERSION, installedJavaReleaseVersion, MINIMUM_JAVA_RELEASE_VERSION);
}
其中每一项都应该很容易测试。
为了简单起见,我删除了你的空检查,但你明白了。