DTO的单元测试

时间:2011-02-25 11:48:47

标签: java unit-testing dto

测试getter和setter是否合适和必要?

我认为他们没有任何逻辑,他们不会崩溃或抛出任何例外。

6 个答案:

答案 0 :(得分:7)

你不应该对DTO的getter和setter进行单元测试,除非它们包含一些需要进行一些测试的复杂逻辑。

答案 1 :(得分:4)

我现在正在阅读GOOS,作者建议您不要为“价值对象”(例如DTO)编写测试用例。

覆盖范围本身的覆盖范围从来都不是好事。正如Karl Seguin所说的那样"Tests should be meaningful"

答案 2 :(得分:3)

使用现代工具并不需要付出太多努力:

import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanConstructor;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanEquals;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanHashCode;
import static com.google.code.beanmatchers.BeanMatchers.hasValidBeanToString;
import static com.google.code.beanmatchers.BeanMatchers.hasValidGettersAndSetters;
import static org.hamcrest.CoreMatchers.allOf;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotNull;

public class Test {

    @Before
    public void setUp() throws Exception {
    }

    @Test
    public void testFlatFileReaderMetadata_Parameters() throws Exception {

        assertNotNull(new Test());

        assertThat(Test.class, allOf(hasValidBeanConstructor(), hasValidBeanEquals(), hasValidGettersAndSetters(),
                hasValidBeanHashCode(), hasValidBeanToString()));
    }
}

答案 3 :(得分:2)

如果生成了getter和setter的代码,我认为它是正确的。这是在语言级别没有属性的主要缺点 - 您有大量生成的代码已签入源代码控制并应进行测试,因为它在覆盖率报告中尖叫红色。

另一方面,即使是简单的getter也可能不正确,例如由于C& P错误:

private String foo;
private String bar;

String getFoo() {return foo;}
String getBar() {return foor;}

我最后的想法:当测试使用它们的适当逻辑时,会对隐式测试程序和setter进行隐式测试。塞特不参加测试? - 可能你永远不会设置这个领域,它可能是最终的?只有setter但没有调用getter? - 无用的领域?

答案 4 :(得分:0)

此函数不会更改此字符串的任何内容... - >没有复杂的二传手

setTest(String test) {
   this.test = test;
}

但是如果你有这样的东西,测试它是有意义的(因为有人可能已经改变了你的标记。):

String token=";";
   setTestTwo(String testTwo) {
   this.testTwo = testTwo + tokenString;
}

答案 5 :(得分:0)

出于以下几个原因,您可能需要/强制进行单元测试getter和setter:
1. Code coverage 2. Automated regression testing

在这些情况下,您可以使用生成这些junit测试用例的库,或者使用泛型编写单个实用程序方法来设置对象,将其取回并比较它们是否相等。