在JUnit 3中,我可以得到当前运行的测试的名称,如下所示:
public class MyTest extends TestCase
{
public void testSomething()
{
System.out.println("Current test is " + getName());
...
}
}
Run Code Online (Sandbox Code Playgroud)
这将打印"当前测试是testSomething".
在JUnit 4中是否有任何开箱即用或简单的方法可以做到这一点?
背景:显然,我不想只打印测试的名称.我想加载存储在与测试同名的资源中的特定于测试的数据.你知道,约定优于配置和所有这些.
如何在带注释的方法上检索注释的值?
我有:
@myAnnotation(attribute1 = value1, attibute2 = value2)
public void myMethod()
{
//I want to get value1 here
}
Run Code Online (Sandbox Code Playgroud) 如何通过反射找出方法的字符串名称?
例如给出:
class Car{
public void getFoo(){
}
}
Run Code Online (Sandbox Code Playgroud)
我想得到字符串"getFoo",如下所示:
Car.getFoo.toString() == "getFoo" // TRUE
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法知道在运行时执行的方法名称?
例如,在private void doSomething (String s)方法内部,我想知道我正在执行该doSomething (String s)方法.
出于日志记录的目的,我创建了一个方法logTitle(),它打印出TestNG测试的调用方法名称.示例代码如下.
@Test
public void test1() throws Exception {
method1();
}
public static void method1() throws Exception {
Utils.logTitle(2);
}
Run Code Online (Sandbox Code Playgroud)
...
public static void logTitle(Integer level) throws Exception {
// Gets calling method name
String method = Thread.currentThread().getStackTrace()[2].getMethodName();
// This would get current method name
switch (level) {
case 1:
logger.info("=======================================================");
logger.info(method);
logger.info("=======================================================");
break;
case 2:
logger.info("------------------------------------");
logger.info(method);
logger.info("------------------------------------");
break;
case 3:
logger.info("---------------------");
logger.info(method);
logger.info("---------------------");
break;
case 4:
logger.info("--------- " + method + " ------------");
break;
default:
logger.info(method);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我在两台不同的机器上获得了不同的logTitle()结果. …
有这个方法
public void foo(){
//..
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在运行时获取methodName(在本例中为foo)?
我知道如何获得classname
this.getClass().的getName()
或者通过Method[] methods = this.getClass().getMethods();
方法名称获取所有公共方法
一旦参数也很重要,因为可能有多个具有相同名称的方法
我正在寻找一种方法来获取当前方法的名称,而无需创建空白对象.有没有办法做到这一点?这将整理我们的日志代码.
以下是我们现在所做的事情:
new Object() {}.getClass().getEnclosingMethod().getName(
Run Code Online (Sandbox Code Playgroud) 在我的示例中,我有以下代码:
package com.example.somepackage;
public class Example {
public static void main(String[] args) {
org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(Example.class);
logger.info("Example message.");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望它像这个最小的例子一样输出到控制台:
com.example.somepackage.Example.main Example message.
Run Code Online (Sandbox Code Playgroud)
我唯一需要的是:
logback.xml文件或模式的模式如果使用额外代码而不是XML配置模式,请同时提供有关如何配对这两者的信息,因此除了打印出的方法名称之外,还可以使用时间,日志级别等模式.
junit 4.10如何在测试开始运行之前打印测试用例名称..
所以我想在这里打印"sampleTest".
我怎么在junit 4.10做到这一点?先感谢您
class1:
TestSuite all = new TestSuite();
all.addTestSuite(class2);
all.run(result);
class2:
public class profileTest extends TestCase()
{
//I want to print the test cases name before the test actually starts executing
@Test
public void sampleTest1(){
//Some code here.
}
@Test
public void sampleTest2(){
//some more code here.
}
}
Run Code Online (Sandbox Code Playgroud) java ×10
junit ×2
reflection ×2
annotations ×1
logback ×1
logging ×1
methods ×1
slf4j ×1
stack-trace ×1
testng ×1
unit-testing ×1