我正在阅读一本关于JUnit的书,作者建议在tearDown方法中使资源归零.为什么?这不是GC的工作吗?它会严重伤害吗?
让我们想到这样的例子:
public class SomeTest extends TestCase {
Vector vector;
List<Object> list;
protected void setUp() {
vector = new Vector();
list = new ArrayList<Object>();
}
// messing with resources
// adding, deleting, testing whatever
protected void tearDown() {
vector = null;
list = null;
}
}
Run Code Online (Sandbox Code Playgroud)
你怎么看?tearDown中的代码是否必要?
我正在编写尝试并开始讨论Spring Unit测试,特别是Transactional单元测试.
我们目前在各种类中注释了大约441个测试,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration
@ContextConfiguration(locations={"/context/ServiceTest-context.xml"}, inheritLocations=false)
public class ServiceTests extends AbstractTransactionalJUnit4SpringContextTests {
@Test
public void testSomething() {}
@Test
public void testSomethingElse() {}
}
Run Code Online (Sandbox Code Playgroud)
我们的每个测试类都有自己的测试上下文.
我们面临的问题是,当我们运行单个测试类或单个包时,测试运行正常.
但是,当我们想通过使用maven或类似Hudson集成之类的东西来扩展它以运行所有我们的测试(当前> 400).
mvn test
Run Code Online (Sandbox Code Playgroud)
我们达到了一个点,然后开始体验Java GC Limit超出错误.
现在我觉得这取决于我们的测试计划设计,而不是我们需要提高内存限制或关闭警告.
任何人都可以分享他们的经验以及他们解决类似问题的方式吗?
Eggsy
spring garbage-collection maven-2 unit-testing transactional
我创建了一些静态变量@BeforeClass.我应该将它们设置为null @AfterClass吗?这些是非IO相关对象.
例:
public class ClassTest{
private static String staticText;
@BeforeClass
public static void setUp(){
staticText="long text";
}
//test methods
//Is this necessary
@AfterClass
public static void tearDown(){
staticText=null;
}
}
Run Code Online (Sandbox Code Playgroud)