我正在清理一个经过深思熟虑的包结构。这涉及在包之间移动大量类。
eclipse 重构工具不会自动将任何相应的单元测试移动到新包中,所以我必须记住手动执行此操作。我通常会忘记这样做,因为我懒惰、愚蠢和健忘。
我正在考虑将一些东西放在一起,以确定看起来在错误包装中的测试,但更愿意使用现成的东西。
是否存在任何此类工具?
MoreUnit 在移动相应的类时自动移动测试类。
如果你的单元测试遵循标准命名约定<class>Test
,那么你可以编写一个类路径扫描程序,它首先标识所有单元测试(名称在"Test"上完成的单元测试,以及至少一次具有@Test
注释的单元测试),然后对于每个单元测试,你可以得到它的名字"com.foo.<class>Test"
, 删除测试,最终会得到"com.foo.<class>"
,然后您可以检查测试本身是否具有"com.foo.<class>"
类型的实例变量。如果没有,您可以触发警告或其他内容。
所以,假设你有一个这样的类
package com.foo.Bar
@NoArgsConstructor
public class Bar {
public int doSomething(){
//...
return 1337;
}
}
和测试:
package com.foo.fooo.BarTest
public class BarTest {
private com.foo.Bar bar;
@Before
public void setup(){
bar = new Bar();
}
@Test
public void testSomething(){
//testing and stuff
}
}
然后,您可以发现 BarTest 类是一个单元测试类(因为它具有@Test
注释,并且还有一个以 Test 结尾的名称)。您可以看到实例变量栏具有,并获取它们的完全限定。你会得到一个com.foo.Bar
,这是错误的,因为你的测试在包com.foo.fooo
中,所以你会触发一个警告,指出你的测试类与它测试的类在不同的包中。这将适用于我正在编写的 90% 的测试类,当然,这是一个非常理想的情况,在实际测试中,您可能有多种类型的实例变量,然后您必须从单元测试的名称推断出哪一个是测试的,并期望至少有一个实例变量是正确的类类型。
由于答案似乎是不存在这样的工具,我自己继续将一些东西放在一起 - 它很自然地适合我维护的工具的附加功能。
如果它对其他人有用,它可以在 1.1-SNAPSHOT 中找到
https://github.com/hcoles/highwheel
它目前只是一个简单的测试,它推断被测类的名称,假设命名约定为
Test<Foo>
或
<Foo>Test
正在被跟踪。如果该类不存在,它将查看其他包中是否存在另一个同名的类。