Java eJUnit测试是否可以判断它是否';s在Eclipse中运行(而不是ant)
我做了一个测试,将一大块预期的XML与实际收到的XML进行比较。如果XML明显不同,则实际的XML将写入磁盘进行分析,测试将失败 我更喜欢使用assertEquals,以便在Eclipse中更容易地比较XML——但这可能会导致非常大的JUnit和CruiseControl日志Java eJUnit测试是否可以判断它是否';s在Eclipse中运行(而不是ant),java,xml,eclipse,ant,junit,Java,Xml,Eclipse,Ant,Junit,我做了一个测试,将一大块预期的XML与实际收到的XML进行比较。如果XML明显不同,则实际的XML将写入磁盘进行分析,测试将失败 我更喜欢使用assertEquals,以便在Eclipse中更容易地比较XML——但这可能会导致非常大的JUnit和CruiseControl日志 有没有一种方法可以根据JUnit测试是通过Eclipse还是通过Ant运行来改变它的行为。通常,在不同的环境中,系统性能是不同的。尝试查找仅由eclipse或ant设置的系统属性 顺便说一句:eclipse中的输出是相同的
有没有一种方法可以根据JUnit测试是通过Eclipse还是通过Ant运行来改变它的行为。通常,在不同的环境中,系统性能是不同的。尝试查找仅由eclipse或ant设置的系统属性 顺便说一句:eclipse中的输出是相同的,只是eclipse控制台以更可读的形式呈现输出 就个人而言,我不会担心日志的大小。一般来说,您不需要保存很长时间,而且磁盘空间很便宜。这里有两种解决方案 使用系统属性
boolean isEclipse() {
return System.getProperty("java.class.path").contains("eclipse");
}
使用stacktrace
boolean isEclipse() {
Throwable t = new Throwable();
StackTraceElement[] trace = t.getStackTrace();
return trace[trace.length - 1].getClassName().startsWith("org.eclipse");
}
是-您可以测试是否设置了某些osgi属性(
System.getProperty(“osgi.instance.area”)
)。如果junit是在eclipse之外通过ant启动的,那么它们将是空的。对于Java 1.6+,它看起来像是System.console()的结果。
决定了在eclipse中运行还是从终端运行:
boolean isRealTerminal()
{
// Java 1.6+
return System.console() != null;
}
如果在路径中包含一些EclipseJAR,那么“java.class.path”
方法可能会很弱
另一种方法是测试“sun.java.command”
:
在我的机器(openjdk-8)上:
一个可能的测试:
boolean isEclipse() {
return System.getProperty("sun.java.command")
.startsWith("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner");
}
我不明白为什么assertEquals使Eclipse中的比较更容易?任何diff工具都可以吗?@AlexR Brilliant从未想过实例化一个异常来确定我当前调用的上下文。这是滥用的时机,但似乎有可能是完美的。谢谢。这将是一个关于这个问题的有趣的评论,但它绝对不是一个有用的答案。它在Eclipse朱诺内部也是空的(
boolean isEclipse() {
return System.getProperty("sun.java.command")
.startsWith("org.eclipse.jdt.internal.junit.runner.RemoteTestRunner");
}