Java 自动填充JUnit安装和拆卸

Java 自动填充JUnit安装和拆卸,java,eclipse,junit,Java,Eclipse,Junit,对于我为我的应用程序所做的大部分测试,我有一个通用的设置和拆卸 当我创建一个新的JUnit测试用例类时,eclipse可以选择自动创建setUp()和tearDown()方法 有没有办法更改默认设置和拆卸方法,使其具有一些自定义代码行 因此,当我使用选中的setUp method创建一个新的测试类时,我得到: @Before public void setUp() throws Exception { UnitTestSetup.standardSetup(); } 导入不应该是一个问

对于我为我的应用程序所做的大部分测试,我有一个通用的设置和拆卸

当我创建一个新的JUnit测试用例类时,eclipse可以选择自动创建setUp()和tearDown()方法

有没有办法更改默认设置和拆卸方法,使其具有一些自定义代码行

因此,当我使用选中的setUp method创建一个新的测试类时,我得到:

@Before
public void setUp() throws Exception
{
    UnitTestSetup.standardSetup();
}

导入不应该是一个问题,因为它会在保存时自动导入所需的包。

为什么不创建一个类来执行代码以进行设置,创建另一个类来进行分解,并使用这些类分别封装进行设置和分解所需的逻辑。然后,您可以在需要时随时随地调用此逻辑

大概是这样的:

商务舱:

package com.foo.bar.businesslogic.woozinator;

public class Woozinator {

    public void doSomething() {
        System.out.println("Doing something.");
        System.out.println("Done.");
    }

}
测试等级:

package com.foo.bar.businesslogic.woozinator;

import org.junit.Test;

import com.foo.bar.businesslogic.testutil.WidgitUserTestSetupUtil;
import com.foo.bar.businesslogic.testutil.WidgitUserTestTearDownUtil;

public class WoozinatorTest {

    @Test
    public void shouldPassTest() {
        WidgitUserTestSetupUtil.setUp();
        // do test stuff here
        WidgitUserTestTearDownUtil.tearDown();
    }

}
设置类:

package com.foo.bar.businesslogic.testutil;

public class WidgitUserTestSetupUtil {

    public static void setUp() {
        System.out.println("Setting up widget environment for widget user test");
        // do stuff here
        System.out.println("Done setting up environment");
    }

}
拆卸类:

package com.foo.bar.businesslogic.testutil;

public class WidgitUserTestTearDownUtil {

    public static void tearDown() {
        System.out.println("Doing woozinator tear down.");
        // undo stuff here
        System.out.println("Done with woozinator tear down.");
    }

}

如果您希望更改EclipseNewJUnit测试用例向导的输出,那么不重写插件的源代码是不可能的。生成的代码是

JUnit支持继承。对测试用例应用公共
@Before
@Before
的一种方法是将它们放在公共父类中,并从测试用例中的父类继承:

public class Common {
     @Before
     public void setUp() {
         ...
     }
     @After
     public void tearDown() {
         ...
     }
}

public class MyTest extends Common {
    @Test
    public void test() {
        // Common.setUp() will have been run before this test
        // Common.tearDown() will run after the test
    }
}

如果您真的觉得值得,您可以编写自己的注释处理器。然后让它处理带有
@Test
注释的所有内容,或者使用generatedsetupandteardown注释处理您自己的
@veryspecialtest,并将其添加到您想要处理的类/方法中


这将是一大堆代码,因此您需要进行大量的测试来证明这一点,但这里有一个关于编写注释处理器的很好的演练:

您可以编写一个JUnit规则,将代码扩展并移动到方法
start
finished

public class YourRule extends TestWatcher {
  @Override
  protected void starting(Description description) {
    UnitTestSetup.standardSetup();
    //more of your code
  }

  @Override
  protected void finished(Description description) {
    //your code
  }
}
在每次测试中使用此规则:

public class YourTest {
  @Rule
  public final YourRule yourRule = new YourRule();

  ...
}

不错的回答,但这会阻止我扩展我的测试。也就是说,如果您为每个测试用例编写相同的代码,那么我每次都必须编写extends Common,您不希望只定义一次,并像
extends Common
那样简单地包含它吗?如果您希望更改JUnit测试用例向导以生成不同的代码,除非您重写插件,否则这是不可能的。好的,谢谢,这就是我想知道的。如果您在回答中包含您的评论,比如“不编写插件是不可能的,最快的选择是以下…”我会接受您的回答这正是我正在做的,但我想要
WidgitUserTestSetupUtil.setUp()和拆卸可以自动完成,而不必每次都编写代码。您可能可以在AspectJ或Spring AOP中执行某些操作:
public class YourTest {
  @Rule
  public final YourRule yourRule = new YourRule();

  ...
}