Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Newcomers » Newcomers » JUnit 4 Tests With Compile Errors Do Not Run
JUnit 4 Tests With Compile Errors Do Not Run [message #213908] Tue, 05 June 2007 17:22 Go to next message
Eclipse UserFriend
Originally posted by: joeboccanfuso.gmail.com

Hi,

I have noticed that JUnit 4 tests (i.e. test methods annotated with
@Test) that contain compile errors are not executed when the test suite
is launched in Eclipse (i.e those that compile fine execute and ones
with compile errors are skipped). However, if the tests were written
with JUnit 3, then those methods with compile errors are executed when
the test suite is launched in Eclipse. They result in error and throw
java.lang.Error with "Unresolved compilation problems:...". I have
included examples of each below.

The behaviour in JUnit 3 is what I am after, but I am not sure if that
is possible with JUnit 4. I suspect that Eclipse is doing a partial
compile of the the .java file containing the tests, stubbing those
methods with compile errors with a throw new(java.lang.Error(...));, and
removing the @Test annotation. I was able to use a decompiler to verify
the stubbing being done, however I was not able to find a decompiler
that supported annotations.

Here are the test cases. Running MyJUnit3Test in the Eclipse IDE
produces a red bar with 2 tests run and 1 error. Running MyJUnit4Test
in the Eclipse IDE produces a green bar with 1 test run and zero errors
or failures.

Is there a way to get the JUnit 3 result with JUnit 4?

-----
import junit.framework.TestCase;

public class MyJUnit3Test extends TestCase
{

public void test1()
{
syntax error
}

public void test2()
{

}
}
-----
import org.junit.Test;

public class MyJUnit4Test
{
@Test
public void test1()
{
syntax error
}

@Test
public void test2()
{

}

}
-----

Thanks in advanced,

Ciao,

Joe
Re: JUnit 4 Tests With Compile Errors Do Not Run [message #213932 is a reply to message #213908] Tue, 05 June 2007 18:32 Go to previous message
Olivier Thomann is currently offline Olivier ThomannFriend
Messages: 518
Registered: July 2009
Senior Member
Joe Boccanfuso a écrit :
> The behaviour in JUnit 3 is what I am after, but I am not sure if that
> is possible with JUnit 4. I suspect that Eclipse is doing a partial
> compile of the the .java file containing the tests, stubbing those
> methods with compile errors with a throw new(java.lang.Error(...));, and
> removing the @Test annotation. I was able to use a decompiler to verify
> the stubbing being done, however I was not able to find a decompiler
> that supported annotations.
You should use the Eclipse disassembler :-).
Here is what I get:
// Compiled from X.java (version 1.5 : 49.0, super bit)
public class X {
Constant pool:
constant #1 class: #2 X
constant #2 utf8: "X"
constant #3 class: #4 java/lang/Object
constant #4 utf8: "java/lang/Object"
constant #5 utf8: "<init>"
constant #6 utf8: "()V"
constant #7 utf8: "Code"
constant #8 method_ref: #3.#9 java/lang/Object.<init> ()V
constant #9 name_and_type: #5.#6 <init> ()V
constant #10 utf8: "LineNumberTable"
constant #11 utf8: "LocalVariableTable"
constant #12 utf8: "this"
constant #13 utf8: "LX;"
constant #14 utf8: "test1"
constant #15 class: #16 java/lang/Error
constant #16 utf8: "java/lang/Error"
constant #17 string: #18 "Unresolved compilation problem:
\n\tSyntax error, insert ";" to complete BlockStatements\n"
constant #18 utf8: "Unresolved compilation problem: \n\tSyntax
error, insert ";" to complete BlockStatements\n"
constant #19 method_ref: #15.#20 java/lang/Error.<init>
(Ljava/lang/String;)V
constant #20 name_and_type: #5.#21 <init> (Ljava/lang/String;)V
constant #21 utf8: "(Ljava/lang/String;)V"
constant #22 utf8: "test2"
constant #23 utf8: "RuntimeInvisibleAnnotations"
constant #24 utf8: "LTest;"
constant #25 utf8: "SourceFile"
constant #26 utf8: "X.java"

// Method descriptor #6 ()V
// Stack: 1, Locals: 1
public X();
0 aload_0 [this]
1 invokespecial java.lang.Object() [8]
4 return
Line numbers:
[pc: 0, line: 3]
Local variable table:
[pc: 0, pc: 5] local: this index: 0 type: X

// Method descriptor #6 ()V
// Stack: 3, Locals: 1
public void test1();
0 new java.lang.Error [15]
3 dup
4 ldc <String "Unresolved compilation problem: \n\tSyntax error,
insert ";" to complete BlockStatements\n"> [17]
6 invokespecial java.lang.Error(java.lang.String) [19]
9 athrow
Line numbers:
[pc: 0, line: 6]
Local variable table:
[pc: 0, pc: 10] local: this index: 0 type: X

// Method descriptor #6 ()V
// Stack: 0, Locals: 1
public void test2();
0 return
Line numbers:
[pc: 0, line: 12]
Local variable table:
[pc: 0, pc: 1] local: this index: 0 type: X
RuntimeInvisibleAnnotations:
#24 @Test(
)
}

As you can see there is no annotation for the test1 method. This is the
problem. We don't preserve annotations for problem methods.

> Is there a way to get the JUnit 3 result with JUnit 4?
I opened https://bugs.eclipse.org/bugs/show_bug.cgi?id=191090. Please
add yourself to the CC list.
--
Olivier
Previous Topic:Fixes between 3.3RC1 and 3.3RC3?
Next Topic:how to get current file
Goto Forum:
  


Current Time: Fri Apr 26 05:44:26 GMT 2024

Powered by FUDForum. Page generated in 0.11020 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top