2009-04-09 104 views
35

我有以下代码:为什么我的@BeforeClass方法不能运行?

@BeforeClass 
    public static void setUpOnce() throws InterruptedException { 
     fail("LOL"); 
    } 

这要么是@Before,@After,@Test或@AfterClass方法的各种其他方法。

测试在启动时不会失败,因为它看起来应该是这样。有人能帮助我吗?

我已经JUNIT 4.5

该方法在设置一个直接呼叫(),其被注释为@Before失败。 类DEF是:

public class myTests extends TestCase { 
+0

你能确认你的类路径中有哪些版本的junit吗? – Peter 2009-04-09 06:28:18

+1

我有类路径中的JUnit 4.5 – 2009-04-09 06:31:08

回答

59

不延伸测试用例,并在同一时间使用注释!
如果你需要创建一个测试套件有注释,使用的RunWith注释,如:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ MyTests.class, OtherTest.class }) 
public class AllTests { 
    // empty 
} 


public class MyTests { // no extends here 
    @BeforeClass 
    public static void setUpOnce() throws InterruptedException { 
     ... 
    @Test 
    ... 

(约定:类名称以大写字母)

13

方法must be static而不是直接调用失败(否则其他方法将不被执行)。

以下类显示了所有的标准的JUnit 4方法类型:

public class Sample { 

    @BeforeClass 
    public static void beforeClass() { 
     System.out.println("@BeforeClass"); 
    } 

    @Before 
    public void before() { 
     System.out.println("@Before"); 
    } 

    @Test 
    public void test() { 
     System.out.println("@Test"); 
    } 

    @After 
    public void after() { 
     System.out.println("@After"); 
    } 

    @AfterClass 
    public static void afterClass() { 
     System.out.println("@AfterClass"); 
    } 

} 

和输出中是(不奇怪):

@BeforeClass 
@Before 
@Test 
@After 
@AfterClass 
+0

您是正确的,谢谢,但一旦我改变为静态,没有开始工作。 – 2009-04-09 06:29:05

+0

向我们展示班级定义。有可能是你的类是另一个类的子类,并且父类可能有一些注解为@BeforeClass的方法,并且父类的方法最终会导致一些错误并导致暂停。 – 2009-04-09 06:31:52

0

为了使注释前函数跑,我必须做到以下几点: 如果你使用Maven,添加一个依赖JUnit的4.11+:

 <properties> 
       <version.java>1.7</version.java> 
       <version.log4j>1.2.13</version.log4j> 
       <version.mockito>1.9.0</version.mockito> 
       <version.power-mockito>1.4.12</version.power-mockito> 
       <version.junit>4.11</version.junit> 
       <version.power-mockito>1.4.12</version.power-mockito> 
     </properties>   

和依赖性:

 <dependencies> 
     <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>${version.junit}</version> 
     <scope>test</scope> 
     </dependency>  
     . 
     . 
     . 
     </dependencies> 

确保您的JUnit测试类没有扩展TestCase类,因为这会导致与旧版本的重叠:

public class TuxedoExceptionMapperTest{ 
    protected TuxedoExceptionMapper subject; 

    @Before 
    public void before() throws Exception { 
    subject = TuxedoExceptionMapper.getInstance(); 
     System.out.println("Start"); 
     MockitoAnnotations.initMocks(this); 
    } 
} 
1

确保:

  • 你的测试类没有按不继承TestCase
  • @BeforeClass方法是静态的
  • 你做在测试类层次结构中没有多个@BeforeClass方法(只有最专业的@BeforeClass方法将被执行)
相关问题