首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最佳实践:在JUnit ()或声明中初始化setUp类字段?

最佳实践:在JUnit ()或声明中初始化setUp类字段?
EN

Stack Overflow用户
提问于 2009-02-04 16:44:06
回答 9查看 169.8K关注 0票数 137

应该在这样的声明中初始化类字段吗?

代码语言:javascript
运行
复制
public class SomeTest extends TestCase
{
    private final List list = new ArrayList();

    public void testPopulateList()
    {
        // Add stuff to the list
        // Assert the list contains what I expect
    }
}

或者在setUp()中是这样的?

代码语言:javascript
运行
复制
public class SomeTest extends TestCase
{
    private List list;

    @Override
    protected void setUp() throws Exception
    {
        super.setUp();
        this.list = new ArrayList();
    }

    public void testPopulateList()
    {
        // Add stuff to the list
        // Assert the list contains what I expect
    }
}

我倾向于使用第一种形式,因为它更简洁,并允许我使用最后的字段。如果我不需要为设置使用setUp()方法,我是否应该继续使用它,为什么?

Clarification: JUnit将为每个测试方法实例化测试类一次。这意味着list将在每个测试中创建一次,不管我在哪里声明它。这也意味着测试之间不存在时间依赖关系。因此,使用setUp()似乎没有好处。但是,JUnit常见问题中有许多在setUp()中初始化空集合的示例,因此我认为一定有原因。

EN

Stack Overflow用户

发布于 2018-08-12 20:43:51

  • 常量值(用于固定或断言)应在声明和final (永不更改)中初始化。
  • 应该在安装方法中初始化被测试的对象,因为我们可以将其设置为on。当然,我们现在可能不会设置一些东西,但是我们可以稍后设置它。在init方法中实例化将简化更改。
  • 如果这些对象被模拟,则测试对象的依赖项,甚至不应该自己实例化:今天,模拟框架可以通过反射来实例化它。

不依赖于模拟的测试可能如下所示:

代码语言:javascript
运行
复制
public class SomeTest {

    Some some; //instance under test
    static final String GENERIC_ID = "123";
    static final String PREFIX_URL_WS = "http://foo.com/ws";

    @Before
    public void beforeEach() {
       some = new Some(new Foo(), new Bar());
    } 

    @Test
    public void populateList()
         ...
    }
}

具有要隔离的依赖项的测试可能如下所示:

代码语言:javascript
运行
复制
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public class SomeTest {

    Some some; //instance under test
    static final String GENERIC_ID = "123";
    static final String PREFIX_URL_WS = "http://foo.com/ws";

    @Mock
    Foo fooMock;

    @Mock
    Bar barMock;

    @Before
    public void beforeEach() {
       some = new Some(fooMock, barMock);
    }

    @Test
    public void populateList()
         ...
    }
}
票数 0
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/512184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档