【发布时间】:2018-11-21 09:21:46
【问题描述】:
我正在使用 JUnit 测试我的 Java 程序。 该程序包括一些 JavaFX GUI 界面和其他日志记录代码。但是,在测试期间,我不希望对这些进行测试。有没有办法在测试和开发之间切换代码?
描述可以很抽象,我举个例子:
public class Helloworld {
/**
* @param args the command line arguments
*/
public static int greetingCnt = 0;
public static void main(String[] args) {
Helloworld helloword = new Helloworld();
helloword.greetWorld();
helloword.greetWorld();
helloword.greetWorld();
System.out.println("Greating count: " + greetingCnt);
}
public void greetWorld() {
System.out.println("Hello World!");
++greetingCnt;
//some other computation...
}
}
在这个例子中,如果我只想测试 greetingCnt 的正确数量但不想打印任何东西或执行任何额外的计算。但在实际程序执行过程中,对程序的功能没有影响。请问有什么办法可以吗?
谢谢!
【问题讨论】:
-
问题似乎在于代码的结构方式,即打印和增量在同一个地方完成。我不确定如何在此示例中解决此问题(可能在其他地方增加并测试 that 功能?)但也许可以在您的实际情况下完成。
-
嗨 Federico,感谢 cmets。我在想的是Java中是否有任何相当于#define或预处理器的东西,以便程序能够根据不同的场景稍微改变行为。
-
abstraction 是编写可测试代码的关键 - 将您的关注点分开,然后编写实际的 unit 测试。 SOLID 是你的朋友。
标签: java unit-testing testing junit