2017-10-06 275 views
-4
@Test 
public void test() throws Exception 
{ 
    try 
    { 
     //some code over here 
    } 
    catch(Exception e) 
    { 
     if(e.toString() == null) 
     { 
       System.out.print("Test Case: Successful"); 
     } 
     else 
     { 
       System.out.println("Test Case: Failed"); 
       System.out.println("Failing Reason: "+ e.toString()); 
     } 
    } 
} 

当前我有上面的代码。 但是,执行JUnit时。 什么都没有打印到控制台。使用try catch语句打印语句

我做错了什么?或者是我不能在JUnit中使用System.out.println。

所以我有第二个问题: 是否可以打印出完成JUnit测试所花费的总时间?

+0

尝试使用e.printStackTrace而不是e.toString并使用.length而不是== –

+0

您正在捕获哪种Exception对象? “Exception”(从Throwable继承)的默认'toString'永远不为空。 – Berger

+0

为什么你认为你需要重塑JUnit会为你做的事情?想象一下,如果您必须将此添加到* every *测试用例....并且使用此代码,JUnit甚至不会检测到测试失败。 –

回答

1

仅当try块中的代码引发异常时,才会运行catch块中的代码。就像你编码一样,除非抛出异常,否则不会打印任何东西。这可能是你的意思:

@Test 
public void test() throws Exception 
{ 
    try 
    { 
     //some code over here 

     // last line of try block 
     System.out.print("Test Case: Successful"); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Test Case: Failed"); 
     System.out.println("Failing Reason: "+ e.toString()); 
    } 
} 
+0

我可以使用什么方式显示完成JUnit测试用例的总时间? –

+0

尽管OP已经接受这个作为OP代码的修复,但我强烈建议不要走这条路。 JUnit框架可能处理得更好。 –

5

这段代码没有意义。

  • 如果没有抛出异常,不会引发异常,所以您不会在catch块中结束;所以在“成功”的情况下,没有办法达到目的(除非你明确地测试了抛出异常,其getMessage()返回null,这是......嗯;在这种情况下,你应该有一个fail()作为try的最后一行)
  • JUnit已经为您处理故障。如果您的方法是“正确”的方式,那么您必须将每个测试用例的代码放在之间。什么是很多重复的代码。
  • 如果try块中的代码因抛出Exception而失败,则可以捕获并吞下该问题。当然,它会被打印到控制台,但JUnit无法捕获它,所以它看起来像测试通过。 (如果引发Error或其他Throwable,它仍然会失败)。

简而言之:刚刚摆脱你的try/catch块,留在try的代码,让测试框架做什么它是专为。

+0

因为我想将结果打印到文本文件中,以便用户可以知道测试是否顺利完成。 –

+1

@LanYungLee你试图在错误的地方解决这个问题。这是你想在框架中解决的问题,而不是框架运行的测试用例。否则,你将不得不一次又一次地重复自己 - 并且重申一下,你打破了JUnit的这种功能。 –