Epa*_*aga 45 java migration junit
我有一帮其扩展TestCase,并希望自动迁移他们是JUnit4测试与注释如JUnit 3班的@Before,@After,@Test等
任何工具赫然出现在大批量运行做到这一点?
gue*_*rda 54
在我看来,它不会那么难.所以让我们试试吧:
您需要导入三个注释:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;`
Run Code Online (Sandbox Code Playgroud)
在完成下几个更改后,您将不需要import junit.framework.TestCase;.
test*方法所有以方法开头的方法都public void test必须以@Test注释开头.正则表达式很容易完成这项任务.
Eclipse生成以下setUp()方法:
@Override
protected void setUp() throws Exception { }
Run Code Online (Sandbox Code Playgroud)
必须替换为:
@Before
public void setUp() throws Exception { }
Run Code Online (Sandbox Code Playgroud)
同样的tearDown():
@Override
protected void tearDown() throws Exception { }
Run Code Online (Sandbox Code Playgroud)
取而代之
@After
public void tearDown() throws Exception { }
Run Code Online (Sandbox Code Playgroud)
extends TestCase删除字符串的每个文件只发生一次
" extends TestCase"
Run Code Online (Sandbox Code Playgroud)
可能有必要删除/重构将执行测试的现有主要方法.
suite()方法转换为@RunWithClass根据saua的评论,必须转换suite()方法.谢谢,saua!
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestDog.class
TestCat.class
TestAardvark.class
})
Run Code Online (Sandbox Code Playgroud)
我认为,通过一组正则表达式可以很容易地完成它,即使它会杀死我的大脑;)
Geo*_*met 35
以下是我用来执行furtelwart建议的实际正则表达式:
// Add @Test
Replace:
^[ \t]+(public +void +test)
With:
@Test\n $1
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove double @Test's on already @Test annotated files
Replace:
^[ \t]+@Test\n[ \t]+@Test
With:
@Test
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove all empty setUp's
Replace:
^[ \*]+((public|protected) +)?void +setUp\(\)[^\{]*\{\s*(super\.setUp\(\);)?\s*\}\n([ \t]*\n)?
With nothing
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Add @Before to all setUp's
Replace:
^([ \t]+@Override\n)?[ \t]+((public|protected) +)?(void +setUp\(\))
With:
@Before\n public void setUp()
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove double @Before's on already @Before annotated files
Replace:
^[ \t]+@Before\n[ \t]+@Before
With:
@Before
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove all empty tearDown's
Replace:
^[ \*]+((public|protected) +)?void +tearDown\(\)[^\{]*\{\s*(super\.tearDown\(\);)?\s*\}\n([ \t]*\n)?
With nothing
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Add @After to all tearDown's
Replace:
^([ \t]+@Override\n)?[ \t]+((public|protected) +)?(void +tearDown\(\))
With:
@After\n public void tearDown()
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove double @After's on already @After annotated files
Replace:
^[ \t]+@After\n[ \t]+@After
With:
@After
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove old imports, add new imports
Replace:
^([ \t]*import[ \t]+junit\.framework\.Assert;\n)?[ \t]*import[ \t]+junit\.framework\.TestCase;
With:
import org.junit.After;\nimport org.junit.Before;\nimport org.junit.Test;\nimport static org.junit.Assert.*;
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Remove all extends TestCase
Replace:
[ \t]+extends[ \t]+TestCase[ \t]+\{
With:
{
Regular Expression: on
Case sensitive: on
File name filter:
*Test.java
// Look for import junit.framework;
Find:
import junit\.framework
Manually fix
Regular Expression: on
Case sensitive: on
// Look for ignored tests (FIXME, disabled, ...)
Find:
public[ \t]+void[ \t]+\w+test
Manually fix
Regular Expression: on
Case sensitive: on
// Look for dummy/empty tests
Find:
public[ \t]+void[ \t]+test[\w\d]*\(\s*\)\s*\{\s*(//[^\n]*)?\s*\}
Manually fix
Regular Expression: on
Case sensitive: on
Run Code Online (Sandbox Code Playgroud)
注意:按照上面显示的顺序执行它们非常重要.
我们正在将相当大的代码库迁移到 JUnit4。由于这是我第二次进行这样的迁移,我决定将代码保存在某处:
https://github.com/FranciscoBorges/junit3ToJunit4
它处理的极端案例比上面答案中列举的案例要多。如:
TestCase.setUp()和TestCase.tearDown()TestCase(String)在子类构造函数中调用构造函数TestCase.assert*移动到 的方法的调用Assert。junit.framework为org.junit| 归档时间: |
|
| 查看次数: |
15996 次 |
| 最近记录: |