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